POJ 3685 Matrix 二分求解第K大
来源:互联网 发布:淘宝卡首页搜索技术 编辑:程序博客网 时间:2024/05/27 20:39
题目链接: 点我
题目大意: 一个按照特殊算法计算的矩阵,求出矩阵中第m小的数字。
题目分析: 矩阵很大,不能把矩阵中所有的数算出来(废话),不难发现,当j不变的时候,值随i的增大而增大,所以矩阵的每一列都是递增的。用二分列举X,再用二分计算X在每列中有多个数字小于等于X就可以判断X是大了还是小了。
PS :所有数据全部使用 long long 就不会出错了
Problem: 3685 User: ChenyangDuMemory: 152K Time: 1282MSLanguage: C++ Result: Accepted#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>typedef long long ll;using namespace std;const ll INF = 100000000000;long long T,n,m;ll get(ll j,ll i){ return (i*i + 100000 * i + j*j - 100000 * j + i *j);}long long C(ll x){ //计算有多少比X小的数 long long ans = 0; for(long long i=1;i<=n;i++){ long long l = 0,r = n+1; //[0,n+1) while(l<r-1){ long long mid = (l+r)>>1; if(get(i,mid)>x)r = mid; else l = mid; } ans += l; } return ans;}int main(){ //freopen("in.txt","r",stdin); scanf("%lld",&T); while(T--){ scanf("%lld%lld",&n,&m); ll l = -INF,r = INF; while(l<r-1){ ll mid = (l+r)>>1; if(C(mid) >= m)r = mid; else l = mid; } printf("%lld\n",r); } return 0;}
阅读全文
0 0
- POJ 3685 Matrix 二分求解第K大
- POJ - 3685 Matrix (二分搜索:查找第k大的值)
- poj 3685(二分查找第K大的值)
- poj3579(二分求解第k小/大值)
- POJ3685 Matrix (二分-查找第K大的值)
- POJ - 3579 Median (二分 + 查找第K大)
- 二分-poj-3685-Matrix
- POJ - 3685 Matrix 二分
- POJ 3685:Matrix 二分
- POJ - 3685 Matrix(二分)
- 线段树求解区间第k大
- poj 2104 第k大
- POJ 3685Matrix(两次二分)
- POJ 3685 - Matrix(二分搜索)
- POJ-3685---Matrix (二分)
- poj 3685 Matrix (二分+枚举+二分)
- poj 3685 Matrix (二分套二分)
- POJ 3685 Matrix(二分套二分)
- 全民飞机大战Java
- Android开发中第三方炫酷的控件
- php 设计模式(组合模式一)
- 二十三、解释器模式——设计模式学习笔记
- php设计模式(组合模式2)
- POJ 3685 Matrix 二分求解第K大
- 各种分布式文件系统简介
- Excel的自动计算提示功能
- 后缀表达式
- Python学习(1)
- bzoj4922 Karp-de-Chant Number 动态规划+贪心
- 阿里巴巴2018校招笔试题
- Manacher算法
- SQL SERVER中,如何把一个表中的数据导入到另一个表中