POJ3685-Matrix
来源:互联网 发布:天津平面设计美工培训 编辑:程序博客网 时间:2024/06/14 21:31
Description
Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that equals i2 + 100000 × i + j2 - 100000 × j + i × j, you are to find the M-th smallest element in the matrix.
Input
The first line of input is the number of test case.
For each test case there is only one line contains two integers, N(1 ≤ N ≤ 50,000) and M(1 ≤ M ≤ N × N). There is a blank line before each test case.
Output
For each test case output the answer on a single line.
Sample Input
121 12 12 22 32 43 13 23 83 95 15 255 10
Sample Output
3-99993312100007-199987-99993100019200013-399969400031-99939
Source
题意:n阶矩阵Aij= i*i + 100000 × i + j*j – 100000 × j + i × j,求第m小的元素
解题思路:我先打n为比较小的表,发现很有规律,大小规律是从右上往左下依次增大,但是wa了,据说这个规律到n为5*10^4就不一定保持了。所以这题应该二分第m小的数,又因为 i*i + 100000 × i + j*j – 100000 × j + i × j是关于i递增的,再次二分每一列,找到比它小的数
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <cmath>#include <map>#include <bitset>#include <set>#include <vector>#include <functional>using namespace std;#define LL long longconst LL INF=0x3f3f3f3f3f3f3f3f;LL m,n;bool check(LL x){ LL sum=0; for(LL i=1;i<=n;i++) { LL l=1,r=n,ans=0; while(l<=r) { LL mid=(l+r)/2; if(mid*mid+100000*mid+i*i-100000*i+mid*i<=x) {ans=mid,l=mid+1;} else r=mid-1; } sum+=ans; } if(sum>=m) return 1; else return 0;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%lld%lld",&n,&m); LL l=-INF,r=INF,ans; while(l<=r) { LL mid=(l+r)/2; if(check(mid)) {ans=mid;r=mid-1;} else l=mid+1; } printf("%lld\n",ans); } return 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 解题报告
- leetcode_54. Spiral Matrix
- 指针最后一道
- myeclipse导入项目报错小红叉解决
- js闭包
- 排序算法之快速排序
- POJ3685-Matrix
- thrift 客户端 ,负载均衡 连接池
- leetcode 312. Burst Balloons
- NotificationManager和Notification区别
- 【linux】linux常用指令
- Apache服务的基础
- 20170517
- 关于js中的delete操作符
- caffe的CMakeList.txt注释