sunshine的神题(from2015.10.23)

codevs1513 皇帝的烦恼

题目大意:给定n个点成环,每个点要求染ai个颜色,要求相邻两点不能有相同颜色,求最少颜色。

思路:二分+dp。fi[i]表示i这个点和1最少相同颜色;gi[i]表示i这个点和1最多颜色,互相更新一下。如果fi[n]==0则可以(中间还要注意如果相邻两个点的和大于x也要返回false)。

orz sunshineorz sunshineorz sunshine

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxm 20005
using namespace std;
int ai[maxm]={0},fi[maxm]={0},gi[maxm]={0},n;
bool judge(int x){
    int i,j;
    memset(fi,127,sizeof(fi));
    memset(gi,0,sizeof(gi));
    fi[1]=gi[1]=ai[1];
    for (i=2;i<=n;++i){
        if (ai[i]+ai[i-1]>x) return false;
        fi[i]=max(0,ai[i]-((x-ai[1])-(ai[i-1]-gi[i-1])));
        gi[i]=min(ai[i],ai[1]-fi[i-1]);
    }return fi[n]==0;
}
int main(){
    int i,l,r=0,mid;scanf("%d",&n);
    for (i=1;i<=n;++i){scanf("%d",&ai[i]);r+=ai[i];}
    l=ai[1];
    while(l!=r){
        if (judge(mid=(l+r)>>1)) r=mid;
        else l=mid+1;
    }printf("%d\n",l);
}

时间: 2024-11-25 16:02:06

sunshine的神题(from2015.10.23)的相关文章

POJ 2828 Buy Tickets(神题!线段树or树状数组)

题目链接:POJ 2828 Buy Tickets [题意]给了你 n(1<=n<=200000)个人的插队信息,让你输出最终的队列的排列 [思路]常规思考的话,这道题就是模拟,但是时间复杂度一定会很高.POJ的discuss上说这道题是神题,难得不是用什么数据结构,而是思路,这道题要逆向去思考,从最后一个人往前看,后插进来的人更容易定位,他一定能站到他想的位置,并且不会在挪动.再前一个人呢?他的位置即是接下来的空位的编号.于是有线段树用于维护位置信息.当然用树状数组也是可以做的,但是要加上二

Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status][Discuss] Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = 4+1+1 7 = 4+1+1+1 8无法表示为集合S的子集的

CodeForces 171F(千古神题。。)

 D - 乐 Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 171F Description qd ucyhf yi q fhycu dkcruh mxeiu huluhiu yi q tyvvuhudj fhycu dkcruh. oekh jqia yi je vydt jxu djx ucyhf. Input j

POJ C++程序设计 编程题#10:输出指定结果二

编程题#10:输出指定结果二 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 通过填空使得程序输出的结果符合下面的要求. #include <iostream> #include <map> using namespace std; // 在此处补充你的代码 int A::count = 0; void func(B b) { } int mai

《Cracking the Coding Interview》——第17章:普通题——题目10

2014-04-28 23:54 题目:XML文件的冗余度很大,主要在于尖括号里的字段名.按照书上给定的方式进行压缩. 解法:这题我居然忘做了,只写了一句话的注解.用python能够相对方便地实现,因为有直接的XML工具可以调用.书上的那种要求应该是符合前序遍历规则. 代码: 1 # 17.10 Parse an XML file, and try to save some space by mapping every item name to an integer index. 2 # Ans

POJ 2484 A Funny Game(神题!)

一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取1或者2个coin后都会使剩下的coin变成线性排列的长条,然后无论双方如何操作都是把该线条分解为若干个子线条而已,即分解为若干个子游戏而已,我想起刘汝佳的大白书上有类似的例题(不过复杂好多),于是便用同样的方法去做了,以sg(x)表示当前连续x个coin的状态的sg函数值,则当从左侧起分别取一个或相邻的两个时,不难得出其后继状态:sg(y)^sg(x-1-y)(0<=y<=(x-1)/2),sg(y)^sg(x-2-y)(0<

10.23 考试总结

10.23 考试总结 救火行动 不得不说还是想问候一下出题人的,那个白色的字是什么鬼.....不过看到了不要喧哗倒是很有意思 所以就是一个大模拟题.....因为比较麻烦,只不过数据很小,纯模拟循环都可以过的说. 考试的时候没有注意到一个点就是可以直接灭火的时候当前这一轮是不算这层着火的,也就是说第五层的火势应该只涨i-1 稍微注意一下这个就可以了,然后就还好,其余的还是都有好好注意到的 打篮球 这个题目我是考试的时候一下没有相同怎么建图....实际上暴力枚举各种参数就可以了. 然后就是纯最短最长

10.23 linux任务计划cron10.24chkconfig工具10.25 systemd管理服务10.26 unit介绍 10.27 target介绍

- 10.23 linux任务计划cron - 10.24 chkconfig工具 - 10.25 systemd管理服务 - 10.26 unit介绍 - 10.27 target介绍 - 扩展 1. anacron http://blog.csdn.net/strikers1982/article/details/4787226  2. xinetd服(默认机器没有安装这个服务,需要yum install xinetd安装) http://blog.sina.com.cn/s/blog_46

2016.10.23大型在职研究生招生说明会

气温骤降,金秋已值,一年一度的十月攻坚战开始了.伴随着在职研究生新政的颁布,北京地区各大院校在职研究生的新简章轮番更新,给很多准备报考在职研究生的学员带来了各种混乱以及忐忑. 正巧,2016年秋季大型在职研究生招生说明会即将在北京国家图书馆召开.不管你对在职研究生有多少疑问,这次会议都会给你一个完美的解释. 10月23日北京地区大型在职研究生招生说明会有必要去吗?去了以后真的能解决所有疑惑吗? 其实啊,我们在9月17日已经成功举办了一次北京大型在职研究生说明会,通过9.17说明会的完美收官总结一