Matrix POJ

来源:互联网 发布:mac 如何转换flac ape 编辑:程序博客网 时间:2024/05/29 17:31

题意,给你个n*n的矩阵,然后矩阵中的每一个数和行列都有关,然后问第k大个数是什么。
开始的时候//想的太简单,比如(1,4)的关系和(2,5)的关系不知道呀
然后因为列确定了后,行数增加,数也跟着增加。。两个二分,和前面一个题有点像。

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;double gg[10000];long long zz(long long i,long long j){    return (long long)(i*i+100000*i+j*j-100000*j+i*j);}long long n,m;int ok(long long mid){    long long ans=0;    for(int j=1;j<=n;j++)    {        long long l=1,r=n,num=0;        while(l<=r)        {            long long m=l+(r-l)/2;            if(zz(m,j)<=mid)            {                num=m;                l=m+1;            }            else r=m-1;        }        ans+=num;    }    if(ans>=m) return 1;    else return 0;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        scanf("%I64d %I64d",&n,&m);        long long l=-100000*n,r=3*n*n+n*100000,res=l;        while(l<=r)        {            long long mid=l+(r-l)/2;            if(ok(mid)){                res=mid;                r=mid-1;            }            else {l=mid+1;}        }        printf("%I64d\n",res);    }    return 0;}
0 0
原创粉丝点击