博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Divide and conquer:Matrix(POJ 3685)
阅读量:4568 次
发布时间:2019-06-08

本文共 1763 字,大约阅读时间需要 5 分钟。

           

                

  题目大意:矩阵里面的元素按i*i + 100000 * i + j*j - 100000 * j + i*j填充(i是行,j是列),求最小的M个数

  这一题要用到两次二分,实在是二分法的经典,主要是每一列都是按照行来递增的,每一行我们都用二分法找到比mid小的那些数就好了

  参考

  

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 typedef long long LL_INT; 7 8 LL_INT getnum(LL_INT, LL_INT); 9 bool judge(LL_INT, LL_INT, const int);10 11 int main(void)//这题双二分法12 {13 int test_sums, size;14 LL_INT M;15 scanf("%d", &test_sums);16 17 while (test_sums--)18 {19 scanf("%d%lld", &size, &M);20 LL_INT lb = -0x3fffffffffffffff, rb = 0x3fffffffffffffff, mid;21 while (rb - lb > 1)22 {23 mid = (lb + rb) / 2;24 if (judge(mid, M, size)) lb = mid;25 else rb = mid;26 }27 printf("%lld\n", rb);28 }29 return 0;30 }31 32 LL_INT getnum(LL_INT i, LL_INT j)33 {34 return i*i + 100000 * i + j*j - 100000 * j + i*j;//注意这题的每一列都是递增的!35 }36 37 bool judge(LL_INT x, LL_INT M, const int N)38 {39 LL_INT line_l, line_r, mid, sum = 0;40 for (int col = 1; col <= N; col++)41 {42 line_l = 1; line_r = N + 1;43 if (getnum(N, col) <= x)//先判断一下这个,还可以剪枝,而且还能避免判断n=1的时候的错误44 sum += N;45 else46 {47 while (line_r - line_l > 1)48 {49 mid = (line_l + line_r) / 2;50 if (getnum(mid, col) <= x) line_l = mid;51 else line_r = mid;52 }53 if (getnum(line_l, col) <= x)54 sum += line_l;55 else56 sum += line_l - 1;57 }58 }59 return sum < M;60 }

  

转载于:https://www.cnblogs.com/Philip-Tell-Truth/p/5140879.html

你可能感兴趣的文章
C#的基本语法
查看>>
CCCC2017大区赛补完
查看>>
深度学习UFLDL老教程笔记1 稀疏自编码器Ⅱ
查看>>
Windows常用命令集
查看>>
luogu P2073 送花
查看>>
CPU占用率呈正弦实现,及实时输出进程和线程的CPU占用率
查看>>
java学习第八天
查看>>
判断是否有人在操作某张表,并获取…
查看>>
第四周仿真与计算作业
查看>>
.net中WebService的使用实例
查看>>
editplus的配色
查看>>
最近3年股息率最高排名
查看>>
ural 1091. Tmutarakan Exams 和 codeforces 295 B. Greg and Graph
查看>>
IO流(四)
查看>>
Java 序列化Serializable
查看>>
Spring在web请求中定义编码(org.springframework.web.filter.CharacterEncodingFilter)
查看>>
[数据库基础]——编码标准之结构
查看>>
c++模版函数
查看>>
android Fragments详解二:创建Fragment
查看>>
VMware Tools (ubuntu系统)安装详细过程与使用
查看>>