SDOJ 1195 Zhenhuan
描述
今日又在看甄嬛传,皇上觉得后宫们的勾心斗角太险恶了,有点不好,决定给每个妃子发丝带以让后宫之间和睦相处。皇上一共有N个后宫(标号为1~n),站成一个环形(1号与n号相邻),每个后宫想要ai个丝带,而且这ai个丝带颜色互不相同,而且每个妃子拥有的丝带不能与和她相邻的妃子的丝带有任何一种颜色相同。
皇上不喜欢太多的颜色,所以皇上就像知道最少需要多少种颜色就能满足所有后宫的要求,设最小颜色为M,而甄嬛想提前知道M的值,以告诉皇上来赢得欢心,然而在皇上后宫太多了,她就不会了,所以呢,她向学信息奥赛的你求助,并答应事成之后奖励你
(21,000,000,006mod1,000,000,007)−1(21,000,000,006mod1,000,000,007)−1吨黄金
输入
第一行一个整数n,接下来有n个数字,第i个数字为ai,表示编号为i的后宫想要ai条丝带。
输出
一个整数表示M
样例输入
960
2
465
159
628
110
88
592
193
546
880
400
622
样例输出
1582
数据范围: 40%的数据:n mod 2==0。0<=ai<=1,000,000,000; 100%的数据:n<=20000。0<=ai<=1,000,000,000;
----------------------------------------------------这是一条分界线-------------------------------------------------------
这道题首先想到的是贪心,分类讨论n%2=1和n%2=0的情况(但听说最高调到了90分????)
而实际上这是个二分答案。二分ans,并判定其是否满足
而说到判定,我觉得这个过程又有点像DP.....
【以下受某blog启发】
“
判定答案ans,即1与n的最小冲突个数是否为0令mi[i]表示1与i的最小冲突个数,ma[i]表示1与i的最大冲突个数。
那么有:
1.最多能冲突那么就是全部都冲突了或是分了上一个冲突了的。
2.最小能冲突那么就是一个都不冲突,否则需要知道最多不冲突的个数,由上一个最多冲突的个数求得。
mi[i]=max{ 0,ai-[ans-ai-1-(a1-ma[i-1])] }
那么mi[n]==0就表示当前答案可行
”
于是贴代码~
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n,ans;
int ma[],mi[];
int a[];
bool check(int x)
{
ma[]=mi[]=a[];
for(int i=;i<=n;i++)
{
ma[i]=min(a[i],a[]-mi[i-]);
mi[i]= max( , a[i] - ( x-a[i-]-(a[]-ma[i-]) ) );
}
return mi[n];
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<=n;i++)
ans=max(ans,a[i]+a[i-]);
int l=ans,r=ans*,mid;
while(l<=r)
{
mid=(l+r)>>;
if (check(mid)) l=mid+;
else r=mid-;
}
printf("%d",l);
return ;
}
SDOJ 1195 Zhenhuan的更多相关文章
- gdutcode 1195: 相信我这是水题 GDUT中有个风云人物pigofzhou,是冰点奇迹队的主代码手,
1195: 相信我这是水题 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 821 Solved: 219 Description GDUT中有个风云人 ...
- poj 1195:Mobile phones(二维树状数组,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14489 Accepted: 6735 De ...
- poj 1195:Mobile phones(二维线段树,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14391 Accepted: 6685 De ...
- ACdream 1195 Sudoku Checker (数独)
Sudoku Checker Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit ...
- POJ 1195
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13774 Accepted: 6393 De ...
- hdu 1195 Open the Lock
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1195 Open the Lock Description Now an emergent task f ...
- poj 1195 Mobile phones(二维树状数组)
树状数组支持两种操作: Add(x, d)操作: 让a[x]增加d. Query(L,R): 计算 a[L]+a[L+1]……a[R]. 当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一 ...
- bzoj 1195: [HNOI2006]最短母串 爆搜
1195: [HNOI2006]最短母串 Time Limit: 10 Sec Memory Limit: 32 MBSubmit: 894 Solved: 288[Submit][Status] ...
- bzoj 1195
http://www.lydsy.com/JudgeOnline/problem.php?id=1195 状压DP. 首先去掉被包含的字符串. 对于字符串i和j,我们求出 当字符串j的左端点在字符串i ...
随机推荐
- idea2018.1.2 激活
https://www.cnblogs.com/ycjcham/p/8724451.html
- 中国区 Azure 服务和定价模式概述
由世纪互联运营的 Microsoft Azure 是第一个在中国正式商用,符合中国政府相关法规要求的国际化公有云服务.本文剖析了由世纪互联运营的 Microsoft Azure 的运营模式.采购模式. ...
- js使用my97插件显示当前时间,且select控制计算时间差
做页面需要两个时间输入框一个显示当前时间,一个显示之前的时间,并且需要一个select下拉框控制两个时间输入框之间的差,效果如下图: 这里使用的是My97DatePicer,简单方便,引入my97插件 ...
- 11gR2 如何诊断节点重启问题
本文对如何诊断11gR2 GI环境下的节点重启问题进行了一些介绍. 首先,像10g版本一样,我们首先介绍在GI中能够导致节点重启的进程.1.Ocssd.bin:这个进程的功能和10g版本的功能基本差不 ...
- group - 用户组文件
DESCRIPTION(描述) /etc/group 是一个ASCII码的文件,它定义了用户所属的组.文件中每行包括一条记录,其格式如下: group_name:passwd:GID:user_lis ...
- ABNF语法
http典型的请求场景 来自极客时间课件 http协议介绍 . [c:\~]$ telnet www.taohui.pub 80 Host 'www.taohui.pub' resolved to 1 ...
- 使用EventLog组件读写事件日志
实现效果: 知识运用: Eventlog类的SourceExists方法 //确定指定的事件源是否已在本地计算机注册 public static bool SourceExists(string s ...
- python整体图
- C++容器类-list
C++ 表(List容器类) 一.概念 头文件:#include <list> 又叫链表,是一种双线性链表,只能顺序访问(从前往后或从后往前) 他不支持随机访问. 二.方法 #includ ...
- React组件间通信
众所周知,ReactJS组件与组件之间的通信是一个难点.在React实际开发中,父子组件之间的传值是比较常见的,刚入门的小伙伴很容易被组件之间的通信绕懵. 今天花了点时间总结了一下React父子组件之 ...