zoukankan      html  css  js  c++  java
  • 51Nod

    数组A和数组B,里面都有n个整数。数组C共有n^2个整数,分别是A00 * B00,A00 * B11......A11 * B00,A11 * B11......An1n−1 * Bn1n−1(数组A同数组B的组合)。求数组C中第K大的数。

     
    例如:A:1 2 3,B:2 3 4。A与B组合成的C包括2 3 4 4 6 8 6 9 12共9个数。

    Input第1行:2个数N和K,中间用空格分隔。N为数组的长度,K对应第K大的数。(2 <= N <= 50000,1 <= K <= 10^9) 
    第2 - N + 1行:每行2个数,分别是Aii和Bii。(1 <= Aii,Bii <= 10^9)Output输出第K大的数。Sample Input

    3 2
    1 2
    2 3
    3 4

    Sample Output

    9
    二分查找 很好的思维题
     1 #include <iostream>
     2 using namespace std;
     3 #include<string.h>
     4 #include<set>
     5 #include<stdio.h>
     6 #include<math.h>
     7 #include<queue>
     8 #include<map>
     9 #include<algorithm>
    10 #include<cstdio>
    11 #include<cmath>
    12 #include<cstring>
    13 #include <cstdio>
    14 #include <cstdlib>
    15 #include<stack>
    16 #include<vector>
    17 long long  n,m;
    18 long long a[510000];
    19 long long b[510000];
    20 long long  zhaogeshu(long long  zhi)
    21 {
    22 
    23     long long  j=n;
    24     long long  sum=0;
    25     for(int i=1;i<=n;i++)
    26     {
    27         while(j>0)
    28         {
    29             if(a[i]*b[j]>zhi)
    30                 j--;
    31             else
    32                 break;
    33         }
    34         sum+=j;
    35     }
    36     return sum;
    37 }
    38 int main()
    39 {
    40     cin>>n>>m;
    41     memset(a,0,sizeof(a));
    42     memset(b,0,sizeof(b));
    43     for(int i=1;i<=n;i++)
    44         scanf("%lld %lld",&a[i],&b[i]);
    45     sort(a+1,a+1+n);
    46     sort(b+1,b+1+n);
    47     long long kaishi=a[1]*b[1];
    48     long long jieshu=a[n]*b[n];
    49     long long  weizhi=n*n-m+1;
    50     long long mid;
    51     long long t=0;
    52     while(kaishi<jieshu-1)
    53     {
    54         mid=(kaishi+jieshu)/2;
    55         if(zhaogeshu(mid)>=weizhi)
    56             {
    57                 jieshu=mid;
    58                 t=mid;
    59             }
    60         else
    61             kaishi=mid;
    62     }
    63     cout<<t<<endl;
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    获得指定目录路径
    播放音乐(mciSendString)
    INotifyPropertyChanged接口
    从excel表格加载数据返回DataSet
    事件与委托
    .net中实现伪静态的学习小结
    今天开通博客了
    EasyUI后台管理系统学习四
    EasyUI后台管理系统学习三
    EasyUI后台管理系统学习二
  • 原文地址:https://www.cnblogs.com/dulute/p/7966709.html
Copyright © 2011-2022 走看看