UVA 1335 Beijing Guards(二分答案)】的更多相关文章

题目链接:uva 1335 - Beijing Guards 题目大意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人的需求,假设每种礼物有无限多个. 解题思路:自己想没有什么思路,参照大白书上的解释,琢磨了一下. 如果n为偶数的话,ans = max{r[i] + r[i + 1] },(r[n + 1] = r[1]). 如果n为奇数的话,上述式子就不…
题意:n 个人成一个圈,每个人想要 ri 种不同的礼物,要求相邻两个人没有相同的,求最少需要多少礼物. 析:如果 n 是偶数,那么答案一定是相邻两个人的礼物总种数之和的最大值,那么如果是奇数,就没那么好做了,我们可以二分答案, 在每次判定时,我们可以有这样的贪心策略,第一个人 1 - r1,在后面的人中,编号为奇数的尽量往后取,编号为偶数的尽量往前取, 因为这样我们才能保证第 n 个人和第一个人尽量不相交. 代码如下: #pragma comment(linker, "/STACK:102400…
Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the Imperial City Wall, the Inner City Wall, and finally the Outer City Wall. Most of these walls were demolished in the 50s and 60s to make way for roads. The walls we…
入口: https://cn.vjudge.net/problem/UVA-1335 [题意] 有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人的需求,假设每种礼物有无限多个 [分析] [蓝书例题] 如果n为偶数的话,ans = max{r[i] + r[i + 1] },(r[n + 1] = r[1]). 如果n为奇数的话,上述式子就不成立了,因为n个人…
竟然用二分,真是想不到: 偶数的情况很容易想到:不过奇数的就难了: 奇数的情况下,一个从后向前拿,一个从前向后拿的分配方法实在太妙了! 注: 白书上的代码有一点点错误 代码: #include<cstdio> #define maxn 100009 #include<algorithm> using namespace std; int p[maxn],right[maxn],left[maxn],n; bool check(int m) { ],y=m-p[]; left[]=x…
求使最大值最小,可以想到二分答案. 然后再根据题目意思乱搞一下,按要求输出斜杠(这道题觉得就这一个地方难). Code /** * UVa * Problem#12627 * Accepted * Time:0ms */ #include<iostream> #include<cstdio> #include<cctype> #include<ctime> #include<cstring> #include<cstdlib> #in…
题目链接: 这道题虽然不是一道典型的二分答案题,但同样也可以用二分答案来做. 来二分面积为$area$的派,然后看看条件是否矛盾. 与其矛盾的便是$f+1$个人是否每个人都会有. 一个半径为$r$的派只能切出$floor(\pi r^2/x)$块. AC代码: #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> using namespace std; const d…
题目链接:https://vjudge.net/problem/UVA-12124 垃圾vjudge毁我青春!! 首先这道题是解决“最小值最大”的问题,所以要二分答案. 在这里我们二分$quality$,看是否可以组装起一台不超过$b$元的电脑.然后处理时用map映射一下. AC代码: #include<cstdio> #include<iostream> #include<map> #include<vector> using namespace std;…
二分查找+一定的技巧 #include<iostream> using namespace std; +; int n,r[maxn],Left[maxn],Right[maxn];//因为不用计算方案,所以可以按[1-r[i]]和[r[i]+1~p]中各拿几个分,当时没想到这个用set类写了个超耗时间的~~~~(>_<)~~~~ bool ok(int p) { ],y=p-r[]; Left[]=x;Right[]=; ;i<=n;i++) { ) { Right[i]=…
书上写的是UVa 12011, 实际上是 12264 参考了https://blog.csdn.net/xl2015190026/article/details/51902823 这道题就是求出一种最优的移动士兵的方式, 使得与敌方相邻的阵营中最少的士兵最多 因为只能在我方的阵营中移动士兵, 所以建模的时候不用加入地方阵营的点. 首先因为士兵只能移动一次, 所以把点拆成两个点, 入点和出点. 设阵营士兵的人数为k[i] 那么源点到入点连一条弧, 容量为k[i], 然后入点和出点再连 一条弧, 容…