题解 UVA1335 【Beijing Guards】
双倍经验:P4409 [ZJOI2006]皇帝的烦恼
如果只是一条链,第一个护卫不与最后一个护卫相邻,那么直接贪心,找出最大的相邻数的和。
当变成环,贪心很容易找到反例(如[5,5,5],贪心答案为10,实际上为15)
答案存在单调性,考虑二分
那么怎么判断mid是否合理呢?设mx【i】表示第i个数与第一个数最多可以相同多少个,mn【i】 表示第i个数与第一个数至少相同多少个
mx[i]=min(a[i],a[1]-mn[i-1]);
【i-1】最少有mn【i-1】个数与【1】相同,则【i】一定不包括这些数
mn[i]=max(0,a[1]+a[i-1]-mx[i-1]+a[i]-x);
a[i-1]-mx[i-1]是【i-1】至少与【1】不同的个数,加上a【1】是【1】与【i-1】所用的最少个数,那么对于【i】,必须有a[1]+a[i-1]-mx[i-1]+a[i]-x个数与【1】相同才能满足x的限制
那么如果mn【n】==0则说明a[1]+a[i-1]-mx[i-1]+a[i]-x<=0,x可以调小
当n=1直接输出答案
#include<cstdio>
#include<iostream>
using namespace std;
#define R register int
int a[100001],mx[100001],mn[100001],n,l,r,mid;
inline bool check(int x) {
for (R i=2; i<=n; i++) {
mx[i]=min(a[i],a[1]-mn[i-1]);
mn[i]=max(0,a[1]+a[i-1]-mx[i-1]+a[i]-x);
}
return !mn[n];
}
int main() {
while(scanf("%d",&n) && n) {
l=0;
for (R i=1; i<=n; i++) scanf("%d",&a[i]),l=max(l,a[i]+a[i-1]);
if(n==1) {
printf("%d\n",a[1]);
continue;
}
for (mx[1]=mn[1]=a[1],r=300000; l<=r;)
if (check(mid=(l+r)>>1)) r=mid-1;
else l=mid+1;
printf("%d\n",l);
}
}
题解 UVA1335 【Beijing Guards】的更多相关文章
- LA 3177 Beijing Guards(二分法 贪心)
Beijing Guards Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the ...
- uva 1335 - Beijing Guards(二分)
题目链接:uva 1335 - Beijing Guards 题目大意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物, ...
- UVALive 3177 Beijing Guards
题目大意:给定一个环,每个人要得到Needi种物品,相邻的人之间不能得到相同的,问至少需要几种. 首先把n=1特判掉. 然后在n为偶数的时候,答案就是max(Needi+Needi+1)(包括(1,n ...
- LA3177 Beijing Guards
Beijing Guards Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the ...
- UVA-1335(UVALive-3177) Beijing Guards 贪心 二分
题面 题意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满足所有人 ...
- 【二分答案+贪心】UVa 1335 - Beijing Guards
Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the Imperial City ...
- UVA 1335 Beijing Guards(二分答案)
入口: https://cn.vjudge.net/problem/UVA-1335 [题意] 有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个 ...
- uva 1335 - Beijing Guards
竟然用二分,真是想不到: 偶数的情况很容易想到:不过奇数的就难了: 奇数的情况下,一个从后向前拿,一个从前向后拿的分配方法实在太妙了! 注: 白书上的代码有一点点错误 代码: #include< ...
- Uva LA 3177 - Beijing Guards 贪心,特例分析,判断器+二分,记录区间内状态数目来染色 难度: 3
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
随机推荐
- 1级搭建类109-Oracle 12cR2 SI FS(Windows Server 2019)公开
Oracle 12cR2 单实例文件系统在Windows Server 2019上的安装 在线查看
- Python标准库之re模块
re模块用于正则表达式. 正则表达式在线测试:http://c.runoob.com/front-end/854 正则表达式元字符可以参考:https://www.w3cschool.cn/zheng ...
- vue router的嵌套使用与传值的query方式
嵌套路由 当我们不满足与 /home这种路由,而是希望通过 /home/news和/home/message访问一些内内容 那么就需要嵌套路由了 实现嵌套路由有两个步骤: ·创建对应的子组件,并且在路 ...
- 2018ICPC南京站Problem J. Prime Game
题意: 对于所有数字分解质因子,如果某个质因子在这个区间出现,则贡献为1,求所有质因子对所有区间做的贡献. 解析: 考虑如果所有全部区间都有这个质因子则这个质因子的贡献是n*(n+1)/2,对于任意因 ...
- SVM-支持向量机(二)非线性SVM分类
非线性SVM分类 尽管SVM分类器非常高效,并且在很多场景下都非常实用.但是很多数据集并不是可以线性可分的.一个处理非线性数据集的方法是增加更多的特征,例如多项式特征.在某些情况下,这样可以让数据集变 ...
- 手动运行jar包,指定配置文件
打包程序 mvn package cd target 指定参数运行 java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar --spring.profile.act ...
- jQuery里ready方法用原生js实现原理
function ready(fn){ if(document.addEventListener){ //标准浏览器 document.addEventListener('DOMContentLoad ...
- 并查集-D - 畅通工程
D - 畅通工程 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通 ...
- 将用户名密码邮箱制成表格,以用户名为q结束
print("输入用户名.密码.邮箱长度不能超过20个") s="" while True: v = input("用户名:") if v= ...
- 获取 Android APP 版本信息工具类(转载)
获取 Android APP 版本信息工具类 获取手机APP版本信息工具类 1.获取版本名称 2.获取版本号 3.获取App的名称 package com.mingyue.nanshuibeidiao ...