zoukankan      html  css  js  c++  java
  • Multiplication Table

    CF#256D:http://codeforces.com/contest/448/problem/D

    题意:给你一个n*m的表格,第i行第j列的数据是i*j,然后询问第k小的数,这里的排序是不去重的。

    题解:二分,每次判断当前的数是第几大,然后与k进行比较。这里统计这个数是第几大,要for一遍,一开始不知道怎么统计,看了别人的知道自己傻了。这里二分的时候不用判断这个数是否在这个表中,为什么不用,自己要好好体会。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<vector>
     6 #include<map>
     7 #include<set>
     8 using namespace std;
     9 long long  n,m;
    10 long long k;
    11 bool judge(long long x){
    12      long long ans=0,tmp;
    13     for(long long i=1;i<=n;i++){
    14           tmp=min(i*m,x);
    15           ans+=tmp/i;
    16     }
    17     return ans<k;
    18 }
    19 int main(){
    20    while(~scanf("%I64d%I64d%I64d",&n,&m,&k)){
    21      long long l=1,r=n*m;
    22      while(l<r){
    23         long long mid=(l+r)/2;
    24         if(judge(mid))l=mid+1;
    25         else r=mid;
    26      }
    27     printf("%I64d
    ",r);
    28    }
    29 }
    View Code
  • 相关阅读:
    Spark Streaming(一)
    ACID
    SparkSQL
    scala样例类
    centos7 防火墙有关命令
    HBase优化
    scp
    HBase与Hive
    HBase与MapReduce交互
    Hadoop安全模式
  • 原文地址:https://www.cnblogs.com/chujian123/p/3853349.html
Copyright © 2011-2022 走看看