poj 3685 Matrix (二分+枚举+二分)
来源:互联网 发布:tekla软件 价格 编辑:程序博客网 时间:2024/06/05 02:59
Matrix
Time Limit: 6000MS Memory Limit: 65536KTotal Submissions: 4233 Accepted: 1035
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
POJ Founder Monthly Contest – 2008.08.31, windy7926778
思路:
1.二分答案,根据矩阵中小于这个数的个数与m的值比较来二分。
2.怎样在矩阵中查找呢?方法也是枚举+二分。仔细观察会发现矩阵每列的值满足单调性(每行不满足),所以想到枚举每列,在每列中找到该列小于这个数的值求和就够了。
ps:二分时注意向上取整还是向下取整,然后注意用long long 就够了。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <map>#include <stack>#include <vector>#include <set>#include <queue>//#pragma comment (linker,"/STACK:102400000,102400000")#define maxn 50005#define mod 1000000000#define INF 0x3f3f3f3fusing namespace std;typedef long long ll;ll n,m,ans;ll f(ll x,ll y){ return x*x+100000*x+y*y-100000*y+x*y;}ll calnum(ll k){ ll i,j; ll le,ri,mid,sum=0; for(j=1;j<=n;j++) // 对每列进行枚举 { le=1; ri=n+1; while(le<ri) // 找比k小的数 { mid=(le+ri)>>1; if(f(mid,j)>=k) ri=mid; else le=mid+1; } sum+=le-1; } return sum;}void solve(){ ll le,mid,ri,t; ri=1LL<<50; le=-ri; while(le<ri) // 二分找答案 { mid=(le+ri)>>1; t=calnum(mid); if(t>=m) ri=mid; else le=mid+1; } ans=le-1;}int main(){ int i,j,t; scanf("%d",&t); while(t--) { scanf("%lld%lld",&n,&m); solve(); printf("%lld\n",ans); } return 0;}
- poj 3685 Matrix (二分+枚举+二分)
- 二分-poj-3685-Matrix
- POJ - 3685 Matrix 二分
- POJ 3685:Matrix 二分
- POJ - 3685 Matrix(二分)
- poj 3685 Matrix (二分套二分)
- POJ 3685 Matrix(二分套二分)
- poj 3685 Matrix 二分里套二分
- POJ 3685Matrix(两次二分)
- POJ 3685 - Matrix(二分搜索)
- POJ-3685---Matrix (二分)
- poj 3273 二分枚举
- 【折半枚举 && 二分】POJ
- POJ 3685 Matrix 二维的二分
- POJ 3685 Matrix (二分搜索)
- poj 3685 Matrix(二分嵌套)
- poj 3343 二分图匹配+二分枚举
- POJ 1505:二分枚举+贪心
- 自我的救赎
- poj1504 Adding Reversed Numbers
- MVC结构
- GAR路由器静态路由实验
- pageFlowScope、backingBeanScope、viewScope、applicationScope、sessionScope、requestScope
- poj 3685 Matrix (二分+枚举+二分)
- 分享一个易企CMS在线客服
- 2014年去哪儿网校园招聘笔试题
- 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
- GAR路由器RIP实验
- NGINX-RTMP复杂度分析
- 工作那些事(三)什么样的公司能吸引你,什么样的公司适合你?
- 排序算法
- HDU 3911 线段树区间染色 区间查询