UVALive 3177 Beijing Guards
题目大意:给定一个环,每个人要得到Needi种物品,相邻的人之间不能得到相同的,问至少需要几种。
首先把n=1特判掉。
然后在n为偶数的时候,答案就是max(Needi+Needi+1)(包括(1,n))。
证明:把物品排成一行,只要一个人从左边开始取,下一个人从右边开始取,以此类推,保证不会重复。
然后在n为奇数的时候,答案就不好做了。
观察一下这道题,发现答案满足可二分性,不如思考一下check怎么写。
因为n为奇数时难点就在看n与1是否矛盾上,只要解决了这个问题,一切好说。
不难发现答案下界就是max(Needi+Needi+1)(包括(1,n)),上界开大一点无所谓的。
还是把物品排成一行,第一个人从左边开始取。
要使第n个人和第1个人尽量不矛盾,不如让他从最后开始选。
然后n-1就从前面开始选。
一路逆推回来,你会发现:让2从左边开始选。
什么?1不是从左边开始选的吗?为什么2也从左边开始选呢?
因为我们二分的mid是可以保证(i,i+1)之间一定不矛盾的,所以从2开始做就是为了n号点与1号点的尽量不矛盾。
换句话说,不会转过圈的都是一定满足的,所以就是要把它们以一种合适的方式排布,成全n和1这一对。
感觉在下一盘惊天大棋?
至于维护方式,也是比较巧(套)妙(路)的。
有mid个物品,第一个人选了前Need[1]个,我们就把这些物品分成左右,[1,Need[1]]和[Need[1]+1,mid]。
记L[i]和R[i]表示i在左边/右边取了多少个。
对于偶数位,由推导,我们尽量从左边选。
L[i]=min(Need[i],Need[1]-L[i-1]),R[i]=Need[i]-L[i]。
对于奇数位,尽量从右边选。
R[i]=min(Need[i],(mid-Need[1])-R[i-1]),L[i]=Need[i]-R[i]。
最后,因为1把L全部取完了,我们只要看L[n]==0即可。
真是妙。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <complex>
#include <stack>
#define LL long long int
#define dob double
#define FILE "3177"
using namespace std; const int N = ;
int n,Ned[N],L[N],R[N]; inline int gi(){
int x=,res=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')res*=-;ch=getchar();}
while(ch<=''&&ch>='')x=x*+ch-,ch=getchar();
return x*res;
} inline bool check(int mid){
int Lh=Ned[],Rh=mid-Ned[];
L[]=Lh;R[]=;
for(int i=;i<=n;++i)
if(i&){
R[i]=min(Ned[i],Rh-R[i-]);
L[i]=Ned[i]-R[i];
}
else{
L[i]=min(Ned[i],Lh-L[i-]);
R[i]=Ned[i]-L[i];
}
return L[n]==;
} int main()
{
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
while(n=gi()){
for(int i=;i<=n;++i)Ned[i]=gi();
if(n==){printf("%d\n",Ned[]);continue;}
int Ans=Ned[n]+Ned[];
for(int i=;i<n;++i)
Ans=max(Ans,Ned[i]+Ned[i+]);
if(n&){
int l=Ans,r=Ans*;Ans=r;
while(l<=r){
int mid=(l+r)>>;
if(check(mid))r=mid-,Ans=mid;
else l=mid+;
}
}
printf("%d\n",Ans);
}
fclose(stdin);fclose(stdout);
return ;
}
Beijing Guards
UVALive 3177 Beijing Guards的更多相关文章
- LA 3177 Beijing Guards(二分法 贪心)
Beijing Guards Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the ...
- Uva LA 3177 - Beijing Guards 贪心,特例分析,判断器+二分,记录区间内状态数目来染色 难度: 3
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- uva 1335 - Beijing Guards(二分)
题目链接:uva 1335 - Beijing Guards 题目大意:有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物, ...
- LA3177 Beijing Guards
Beijing Guards Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the ...
- 题解 UVA1335 【Beijing Guards】
UVA1335 Beijing Guards 双倍经验:P4409 [ZJOI2006]皇帝的烦恼 如果只是一条链,第一个护卫不与最后一个护卫相邻,那么直接贪心,找出最大的相邻数的和. 当变成环,贪心 ...
- 【二分答案+贪心】UVa 1335 - Beijing Guards
Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the Imperial City ...
- UVALive 3177 长城守卫
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- uva 1335 - Beijing Guards
竟然用二分,真是想不到: 偶数的情况很容易想到:不过奇数的就难了: 奇数的情况下,一个从后向前拿,一个从前向后拿的分配方法实在太妙了! 注: 白书上的代码有一点点错误 代码: #include< ...
- UVA 1335 Beijing Guards(二分答案)
入口: https://cn.vjudge.net/problem/UVA-1335 [题意] 有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个 ...
随机推荐
- Less 原理
Less 原理 Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件. Less 并没有裁剪 CSS 原有的特性,更不 ...
- selenium 定位input输入框下的选择项
今天的问题与下图中的类似 这是一个input型输入框,当我点击或输入值时,输入框下方会显示选择项帮助快速输入,代码如下: <input class="v-input some" ...
- hdu 3183 A Magic Lamp RMQ ST 坐标最小值
hdu 3183 A Magic Lamp RMQ ST 坐标最小值 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题目大意: 从给定的串中挑 ...
- springmvc 4.3,RequestParamMethodArgumentResolver无法正常解析String参数问题解决
搭建一个新工程时,想使用最新稳当版的springmvc,所以选择了最新的版本 <dependency> <groupId>org.springframework</gro ...
- mac ox下android 通过battery-historian进行电量分析
简单介绍下如何用battery-historian进行电量分析,因为battery-hostorian是基于go语言的框架,所以需要安装go 1.安装go 2.配置go环境变量到.bash_profi ...
- Cacti监控一台Webserver上多个Tomcatport的实现
由于一台web应用server上面安装了多台tomcat,有多个port.比方默认的8080,还有兴许追加的9100,9300,9500等等.一个cacti_host_template_tomcat_ ...
- 【特征匹配】BRISK原文翻译
原文:Stefan Leutenegger, Margarita Chli et al.<BRISK: Binary Robust Invariant Scalable Keypoints> ...
- 中颖内带LED资源驱动代码
//上一篇写了LCD驱动,本篇写下LED驱动 //DISPCON 最高位为1时, 选择LED驱动,LCD驱动无效 最高位为0时, 选择LCD驱动.LED驱动无效 void Sh79fLed_Init( ...
- 微信小程序的Web API接口设计及常见接口实现
微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们 ...
- MD5加密--Java
MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.R ...