博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1863: [Zjoi2006]trouble 皇帝的烦恼( 二分答案 )
阅读量:4984 次
发布时间:2019-06-12

本文共 1622 字,大约阅读时间需要 5 分钟。

二分答案..然后从头到尾推一下, 看最后一个能不能取0个和第一个人相同的勋章 

-----------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std;
 
const int maxn = 20009;
 
int w[maxn], Min[maxn], Max[maxn], N;
 
void init() {
scanf("%d", &N);
for(int i = 0; i < N; i++) scanf("%d", w + i);
}
 
bool check(int x) {
if(w[0] + w[N - 1] > x) return false;
for(int i = 1; i < N; i++)
if(w[i - 1] + w[i] > x) return false;
Min[0] = Max[0] = w[0];
for(int i = 1; i < N; i++) {
Max[i] = min(w[i], w[0] - Min[i - 1]);
if(x - w[i - 1] - (w[0] - Max[i - 1]) >= w[i])
Min[i] = 0;
else
Min[i] = w[i] - (x - w[i - 1] - (w[0] - Max[i - 1]));
}
return !Min[N - 1];
}
 
int main() {
init();
int L = 1, R = 1000000, ans;
while(L <= R) {
int m = (L + R) >> 1;
if(check(m))
ans = m, R = m - 1;
else
L = m + 1;
}
printf("%d\n", ans);
return 0;
}

----------------------------------------------------------------------- 

 

1863: [Zjoi2006]trouble 皇帝的烦恼

Time Limit: 1 Sec  
Memory Limit: 64 MB
Submit: 475  
Solved: 245
[ ][ ][ ]

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

 

转载于:https://www.cnblogs.com/JSZX11556/p/4897741.html

你可能感兴趣的文章
Ember.js 1.0 RC 发布,JavaScript 框架
查看>>
linux下mysql配置文件my.cnf详解
查看>>
获取微信用户列表Openid
查看>>
POJ 2162 Document Indexing(模拟)
查看>>
关于T/G/M/K
查看>>
架构必备词汇
查看>>
drupal8变量的存储和设定使用yml文件
查看>>
Window10 + VS2017 + openMVS
查看>>
在Windows平台下安装与配置Memcached及C#使用方法
查看>>
判断浏览器是否支持FileReader
查看>>
CLR via C#学习笔记-第九章-向方法传递可变数量的参数
查看>>
C# Remove Duplicates in List
查看>>
WPF - 为什么不能往Library的工程中添加WPF window
查看>>
电商平台实战——准备篇
查看>>
算法导论第三版第一章习题
查看>>
移动服务开发框架
查看>>
SublimeText快捷键操作
查看>>
Python开发 基礎知識 (未完代補)
查看>>
Verilog
查看>>
C#操作Word (1)Word对象模型
查看>>