POJ 3685 二分套二分(水题

Posted mj-liylho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3685 二分套二分(水题相关的知识,希望对你有一定的参考价值。

题意:给出一个N*N的矩阵A,A[i][j]的值等于i2 + 100000 ×i + j2 - 100000 × j + i × j,求这个矩阵中第M小的数

 

代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 long long N;
 5 long long cal(long long i,long long j){
 6     return i*i+100000*i+j*j-100000*j+i*j;
 7 }
 8 long long judge(long long d){
 9     long long j,l,r,mid,ans,sum;
10     sum=ans=0;
11     for(j=1;j<=N;j++){
12         l=1,r=N;
13         while(l<=r){
14             mid=(l+r)/2;
15             if(cal(mid,j)<=d){
16                 ans=mid;
17                 l=mid+1;
18             }
19             else
20             r=mid-1;
21         }
22         sum+=ans;
23     }                           //函数关于i递增,二分求值小于d的数的个数
24     return sum;                 
25 }
26 int main(){
27     long long i,j,l,r,t,M,mid,ans;
28     scanf("%I64d",&t);
29     while(t--){
30         scanf("%I64d%I64d",&N,&M);
31         l=-1e10,r=1e10;         
32         while(l<=r){            
33             mid=(l+r)/2;
34             if(judge(mid)>=M){
35                 ans=mid;
36                 r=mid-1;
37             }
38             else
39             l=mid+1;
40         }
41         printf("%I64d
",ans);
42     }
43     return 0;
44 }

 

以上是关于POJ 3685 二分套二分(水题的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3685 二分套二分

poj3685 Matrix

POJ-3579 Median---二分第k大(二分套二分)

POJ 3685 二分

POJ3685 Matrix(嵌套二分)

POJ 3579 3685(二分-查找第k大的值)