zoukankan      html  css  js  c++  java
  • Wannafly Camp 2020 Day 1F 乘法

    一开始想根据单调性双指针

    后来血了才想起来负负得正

    于是暴力二分答案即可

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    int n,m,k,a[N],b[N];
    int calc(int x) {
        int r=0;
        for(int i=1;i<=n;i++) {
            if(a[i]>0) r+=lower_bound(b+1,b+m+1,(double)x/a[i])-(b+1);
            if(a[i]<0) r+=m-(upper_bound(b+1,b+m+1,(double)x/a[i])-b)+1;
            if(a[i]==0) if(x<0) r+=m;
        }
        return r;
    }
    int check() {
        vector <int> v;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) {
                v.push_back(a[i]*b[j]);
            }
        }
        sort(v.begin(),v.end());
        return v[k-1];
    }
    signed main() {
        scanf("%lld%lld%lld",&n,&m,&k);
        k=n*m-k+1;
        for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
        for(int i=1;i<=m;i++) scanf("%lld",&b[i]);
        sort(a+1,a+n+1);
        sort(b+1,b+m+1);
        int l=-(1ll<<60),r=1ll<<60;
        while(r>l) {
            int mid=(l+r)>>1;
            if(calc(mid)>=k) r=mid;
            else l=mid+1ll;
        }
        printf("%lld",l-1);
        //printf(" %lld",check());
    }
    
  • 相关阅读:
    统计候选人
    九宫格输入法
    前端同学面试准备
    1、单元格内换行诀窍、合并单元格、身份证、日期乱码
    读写锁
    混合锁、互斥锁
    原子操作、自旋锁
    pipeline httpmodule
    vm +cenos7+gitlab 02
    vm +cenos7+gitlab 01
  • 原文地址:https://www.cnblogs.com/mollnn/p/12254273.html
Copyright © 2011-2022 走看看