1863: [Zjoi2006]trouble 皇帝的烦恼
来源:互联网 发布:apache derby 编辑:程序博客网 时间:2024/05/01 01:32
1863: [Zjoi2006]trouble 皇帝的烦恼
Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 522 Solved: 273
[Submit][Status][Discuss]
Description
经过多年的杀戮,秦皇终于统一了中国。为了抵御外来的侵略,他准备在国土边境安置n名将军。不幸的是这n名将军羽翼渐丰,开始展露他们的狼子野心了。他们拒绝述职、拒绝接受皇帝的圣旨。秦皇已经准备好了秘密处决这些无礼的边防大将。不过为防兵变,他决定先授予这些将军一些勋章,为自己赢得战略时间。将军们听说他们即将被授予勋章都很开心,他们纷纷上书表示感谢。第i个将军要求得到ai枚不同颜色的勋章。但是这些将军都很傲气,如果两个相邻的将军拥有颜色相同的勋章他们就会认为皇帝不尊重他们,会立即造反(编号为i的将军和编号为i+1的将军相邻;因为他们驻扎的边境可以类似看成一个圆形,所以编号1和编号n的将军也相邻)。皇帝不得不满足每个将军的要求,但对他们的飞扬跋扈感到很气愤。于是皇帝决定铸造尽量少种类的勋章来满足这些狂妄者的要求。请问他至少要铸造多少种颜色的勋章?
Input
第一行有一个整数n(1<=n<=20000)。接下来n行每行一个整数ai,表示第i个将军要求得到多少种勋章。(1<=ai<=100000) 输出一个整数,即最少需要多少种勋章。
Output
4 2 2 1 1
Sample Input
4
Sample Output
HINT
Source
二分
奇妙的二分。。。大概苟蒻的智商永远想不到
第一感觉是找到最大的相邻两数和,这样大概把这些颜色分成左右两份,轮流使用其中一份的颜色看似为正解
但这样不满足奇数情况
这样考虑二分,设a[i]是第i个人与第一个最少重复几种,b[i]是第i个人与第一个人最多重复几种
这样判断a[n] == 0就好
写的时候二分下标出错了。。必须保证最少最少也是最大的相邻两数和
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 2E4 + 20;int n,a[maxn],b[maxn],v[maxn];bool Judge(int now){a[1] = b[1] = v[1];for (int i = 2; i <= n; i++) {//if (v[i] > now) return 0;a[i] = max(v[i] - (now - v[1] - (v[i-1] - b[i-1])),0);b[i] = min(v[1] - a[i-1],v[i]);if (a[i] > b[i]) return 0;}//if (v[n] > now) return 0;return a[n] == 0;}int main(){#ifdef YZYfreopen("trouble1.in","r",stdin);#endifcin >> n;int ans = 0;for (int i = 1; i <= n; i++) scanf("%d",&v[i]),ans = max(ans,v[i]+v[i-1]);ans = max(ans,v[1]+v[n]); if (n % 2 == 0) {cout << ans;return 0;}int l = ans,r = ans*2 + 10;while (r - l > 1) {int mid = (l+r) >> 1;if (Judge(mid)) r = mid;else l = mid;}if (Judge(l)) cout << l;else cout << r;//cout << r;return 0;}
0 0
- 1863: [Zjoi2006]trouble 皇帝的烦恼
- BZOJ 1863: [ZJOI2006]trouble 皇帝的烦恼
- 【DP/二分】BZOJ 1863:[Zjoi2006]trouble 皇帝的烦恼
- BZOJ 1863: [Zjoi2006]trouble 皇帝的烦恼 二分
- BZOJ 1863 [Zjoi2006]trouble 皇帝的烦恼【dp+二分】
- [bzoj1863][Zjoi2006]trouble 皇帝的烦恼
- 【bzoj1863】[Zjoi2006]trouble 皇帝的烦恼
- bzoj1863 [Zjoi2006]trouble 皇帝的烦恼
- BZOJ1863 [Zjoi2006]trouble 皇帝的烦恼 二分答案+DP
- bzoj1863 [Zjoi2006]trouble 皇帝的烦恼 二分+DP
- bzoj1863[Zjoi2006] trouble 皇帝的烦恼(二分+dp)
- bzoj 1863: [Zjoi2006]trouble 皇帝的烦恼(二分答案+dp)
- 【bzoj 1863】[Zjoi2006]trouble 皇帝的烦恼(二分答案+dp)
- 省选专练ZJOI2006皇帝的烦恼
- 【bzoj1863】【zjoi2006】【皇帝的烦恼】【二分+dp】
- CodeVS1513 皇帝的烦恼
- BZOJ 1863 ZJOI 2006 皇帝的烦恼 二分答案
- [codevs1513][BZOJ1863]皇帝的烦恼(二分+dp)
- OC中对数组排序的几种方法
- Android 6.0运行时权限
- iOS UI绘制和布局基础解析
- [小技巧]如何得到C语言中int最大值
- 线程
- 1863: [Zjoi2006]trouble 皇帝的烦恼
- 47、Java中怎么把字符串转换成日期格式啊
- CSR8670的A2DP与AVRCP的应用笔记
- Android中Fragment学习笔记
- 解决“U盘插入Ubuntu后文件只读且无法删除”问题
- cocos2d-lua09apk打包发布&C++注册到Lua
- tomcat 默认网站和虚拟目录配置
- curl与php
- UTF-8 GBK