链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4081

题解

对于nnn为偶数偶数直接找最大的ri+ri+1" role="presentation">ri+ri+1ri+ri+1r_i+r_{i+1},你可以通过偶数从上往下放,奇数从下往上放构造出一种合法方案,而且显然ri+ri+1ri+ri+1r_{i}+r_{i+1}就是解的下界
奇数我没想出来怎么处理,看了刘汝佳的题解:第一个人直接从最小的开始放,连续放1...r11...r11...r_1,第二个人从r1+1r1+1r_1+1开始连续放r2r2r_2个,下一个从最大的数开始放,再下一个从最小的数开始放,以此类推,最后第nnn个是从上往下放的,二分上界然后模拟,验证一下中间或者第n" role="presentation">nnn个有没有发生冲突。
他说这样显然是最优的,虽然我无法证明,不过我觉得这样摆放的确是很优的,这种验证方式也的确符合单调的性质。
谁能严谨地证明这种贪心地正确性?

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#define clear(x) memset(x,0,sizeof(x))
#define maxn 100010
using namespace std;
int n, r[maxn], a[maxn], b[maxn], c[maxn];
bool check(int lim)
{int i;clear(a), clear(b), clear(c);c[1]=r[1];c[2]=0,b[2]=r[1]+1, a[2]=r[1]+r[2];for(i=3;i<=n;i++){if(i&1) //ÆæÊýÍùÉÏÈ¡ {if(a[i-1]==0){c[i]=lim-r[i]+1;if(c[i]<=c[i-1])return false;}else if(r[i]<=lim-a[i-1]){c[i]=lim-r[i]+1;}else{c[i]=a[i-1]+1;b[i]=b[i-1]-1;a[i]=b[i]-(r[i]-(lim-c[i]+1))+1;if(a[i]<=c[i-1])return false;}}else    //żÊýÍùÏÂÈ¡ {if(a[i-1]==0){c[i]=r[i];if(c[i]>=c[i-1])return false;}else if(r[i]<a[i-1]){c[i]=r[i];}else{c[i]=a[i-1]-1;b[i]=b[i-1]+1;a[i]=b[i]+r[i]-c[i]-1;if(a[i]>=c[i-1])return false;}}}if(a[n])return a[n]>c[1];return c[n]>c[1];
}
int odd()
{int i, l=-1;if(n==1)return r[1];for(i=1;i<n;i++)l=max(l,r[i]+r[i+1]);l=max(l,r[1]+r[n]);int r=maxn<<2, mid=(l+r)>>1;while(l^r){if(check(mid))r=mid;else l=mid+1;mid=(l+r)>>1;}return l;
}
int even()
{int ans=-1, i;for(i=1;i<n;i++)ans=max(ans,r[i]+r[i+1]);ans=max(ans,r[1]+r[n]);return ans;
}
int main()
{int t, i;for(scanf("%d",&n);n;scanf("%d",&n)){for(i=1;i<=n;i++)scanf("%d",r+i);if(n&1)printf("%d\n",odd());else printf("%d\n",even());}return 0;
}

UVA1335 Beijing Guards相关推荐

  1. UVa1335 Beijing Guards(二分查找)

    问题:有n个守卫,构成一个环,分别要求获得ri个礼物,问最少需要准备多少个礼物,使得相邻的两个人礼物各不相同 思路: 假设礼物个数为 p n为偶数情况时,相邻两个要求礼物的和的最大值满足条件 n为奇数 ...

  2. 长城守卫 Beijing guards CERC 2004 LA3177 解题总结

    长城守卫 Beijing guards CERC 2004 LA3177 解题总结 在最小值,最大值的问题 或者没有办法确定答案时候,  可以使用二分答案法. #include <cstdio& ...

  3. LA3177 - Beijing Guards(二分+贪心【更优美的解法)

    简介:同皇帝的烦恼 分析: 如果n是偶数,那么答案就是相邻两个人的r值之和的最大值 即ans=max{r(i)+r(i+1)} (i=1,2,3,-,n),规定r(n+1)=r1 这时的ans实际上是 ...

  4. [UVALive 3177] Beijing Guards

    图片加载可能有点慢,请跳过题面先看题解,谢谢 Uva的题目还是很好的,比如这道,是一道比较好的思维题,代码难度不大 首先处理一下偶数的情况,很简单,答案是相邻两个守卫的礼物和的最大值 这儿请 fhr ...

  5. 【UVA - 1335】Beijing Guards (贪心,二分)

    题干: 题目大意: 有n个人为成一个圈,其中第i个人想要r[i]种不同的礼物,相邻的两个人可以聊天,炫耀自己的礼物.如果两个相邻的人拥有同一种礼物,则双方都会很不高兴,问最少需要多少种不同的礼物才能满 ...

  6. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  7. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

  8. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

  9. oracle数据库 cmd,cmd命令操作Oracle数据库

    //注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有!@#¥%--&*之类的  所以在Oracle数据库设置密码是不要太复杂 /String Database ...

最新文章

  1. webpage not available是什么意思_MySQL很想啊,为什么还要有noSQL?
  2. 001_Ajax简介
  3. SAP CRM市场营销表结构
  4. nagios监控三部曲之——nagios实现飞信报警(3)
  5. 炸了!亚马逊薪资文件泄露!原来这么多人年薪百万
  6. 【论文复现】使用CNN进行文本分类
  7. MyCat分片规则之按自然月分片
  8. 关于火狐浏览器国际版和国内版的说明
  9. Google Chrome谷歌浏览器清除缓存以及清除Cookie快捷键
  10. 互联网产品经理必读书目推荐
  11. 面试官嘲笑我,这你都不会?
  12. Linux平台总线驱动设备模型
  13. 微信小程序中使用iconfont阿里巴巴矢量图标
  14. 用MFC做漂亮界面之美化对话框
  15. 不重启JVM,对未添加日志的方法添加日志!
  16. Java-8-Optional类
  17. 超市管理系统的html页面,基于WEB的超市管理系统_站内搜索_Web开发网
  18. uploadify上传图片
  19. 2006-07-16蜡肉的吃法(不完全)
  20. 视频质量分析工具介绍

热门文章

  1. im即时通讯消息id的设计
  2. 进阶篇-SpringBoot2.x自定义starter启动器
  3. 带你玩转Spring Cloud Tencent(一)概述
  4. 找出bilibili隐藏在后方的视频并突破访问限制实现爬取
  5. 设计模式04——Factory Method模式
  6. alt.js 使用教程
  7. 接口自动化测试(1)
  8. poj 1001 Exponentiation(java)
  9. uc保存网页html,UC浏览器怎么保存网页
  10. Linux基础 之 curl 命令