POJ3685--Matrix
来源:互联网 发布:斑马梦龙网络计划介绍 编辑:程序博客网 时间:2024/06/07 05:23
题目大意:给出一个N*N的矩阵,第i行第j列的值为i*i + 100000*i + j*j - 100000*j + i*j,求矩阵中第M小的数
分析:由i*i + 100000*i + j*j - 100000*j + i*j这个公式,可知i是单调递增的。所以,我们可以第一次二分答案mid,第二次根据i的单调性依次二分每一列,得到比mid小的数的个数,如果总个数小于M的话,则说明mid小了。
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;LL T, N, M;LL f(LL i, LL j) { return i*i + 100000*i + j*j - 100000*j + i*j;}//mid是否是第M小的数bool C(LL mid) { LL cnt = 0; //统计比mid小的数 for(LL j = 1; j <= N; j++) { LL L = 0, R = N+1; while(R-L > 1) { LL i = (L+R)>>1; if(f(i, j) < mid) L = i; else R = i; } cnt += L; } return cnt < M;}int main() { scanf("%lld", &T); while(T--) { scanf("%d%d", &N, &M); LL L = -100000*N, R = N*N+100000*N+N*N+N*N; while(R-L > 1) { LL mid = (L+R)>>1; if(C(mid)) L = mid; else R = mid; } printf("%lld\n", L); } return 0;}
0 0
- POJ3685--Matrix
- POJ3685-Matrix
- POJ3685-Matrix
- poj3685 Matrix 二分答案
- POJ3685 Matrix 二分搜索
- poj3685 Matrix二分
- poj3685
- poj3685
- poj3685
- poj3685
- POJ3685
- poj3685 Matrix(第K大的数)
- POJ3685 Matrix (二分-查找第K大的值)
- 两次二分搜索--poj3685
- poj3685(嵌套二分)
- poj3685 多重二分
- POJ3685->二分套二分
- poj3685 解题报告
- hdu 5417 Victor and Machine 思考题
- 黑马程序员----标识符和访问修饰符
- Qt 插件篇
- 题目:不同的二叉查找树
- 黑马程序员----String字符串、内部类和异常
- POJ3685--Matrix
- BC 52 div2 A Victor and Machine
- 如何写些用于装逼的JavaScript代码
- JavaScript 入门必读
- [扫盲]介绍一下GFW的工作原理和封锁技术
- 设计模式-结构型之代理模式
- 学习小结20150822
- 2015.8.22
- Leetcode 235 Lowest Common Ancestor of a Binary Search Tree