设f[i][S]表示第i份食物被两个人吃的状态为S是否有可能,枚举f[1][]的情况后检验

f[i][0]=(f[i-1][1]&a[i-1]>=a[i])|(f[i-1][3]&a[i-1]>=2*a[i])

f[i][1]=(f[i-1][1]&2*a[i-1]>=a[i])|(f[i-1][3]&a[i-1]>=a[i])

f[i][2]=(f[i-1][0]&a[i]>=a[i-1])|(f[i-1][2]&2*a[i]>=a[i-1])

f[i][3]=(f[i-1][0]&a[i]>=2*a[i-1])|(f[i-1][2]&a[i]>=a[i-1])

#include<cstdio>
#define N 1000010
int n,i,j,S,a[N],g[N][4],ans[N],c[N];
bool f[N][4];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
bool dp(int S){
for(i=1;i<=n;i++)for(j=0;j<4;j++)f[i][j]=0;
f[1][S]=1;
for(i=2;i<=n;i++){
if(f[i-1][1]&a[i-1]>=a[i])f[i][0]=1,g[i][0]=1;
else if(f[i-1][3]&a[i-1]>=2*a[i])f[i][0]=1,g[i][0]=3;
if(f[i-1][1]&2*a[i-1]>=a[i])f[i][1]=1,g[i][1]=1;
else if(f[i-1][3]&a[i-1]>=a[i])f[i][1]=1,g[i][1]=3;
if(f[i-1][0]&a[i]>=a[i-1])f[i][2]=1,g[i][2]=0;
else if(f[i-1][2]&2*a[i]>=a[i-1])f[i][2]=1,g[i][2]=2;
if(f[i-1][0]&a[i]>=2*a[i-1])f[i][3]=1,g[i][3]=0;
else if(f[i-1][2]&a[i]>=a[i-1])f[i][3]=1,g[i][3]=2;
}
for(j=0;j<4;j++)f[0][j]=f[n][j],f[1][j]=0;
i=1;
if(f[i-1][1]&a[i-1]>=a[i])f[i][0]=1,g[i][0]=1;
else if(f[i-1][3]&a[i-1]>=2*a[i])f[i][0]=1,g[i][0]=3;
if(f[i-1][1]&2*a[i-1]>=a[i])f[i][1]=1,g[i][1]=1;
else if(f[i-1][3]&a[i-1]>=a[i])f[i][1]=1,g[i][1]=3;
if(f[i-1][0]&a[i]>=a[i-1])f[i][2]=1,g[i][2]=0;
else if(f[i-1][2]&2*a[i]>=a[i-1])f[i][2]=1,g[i][2]=2;
if(f[i-1][0]&a[i]>=2*a[i-1])f[i][3]=1,g[i][3]=0;
else if(f[i-1][2]&a[i]>=a[i-1])f[i][3]=1,g[i][3]=2;
return f[1][S];
}
int main(){
read(n);
for(i=1;i<=n;i++)read(a[i]);a[0]=a[n];
for(S=0;S<4;S++)if(dp(S))break;
if(S==4)puts("NIE");
else{
ans[1]=S;
for(i=n,j=g[1][S];i>1;j=g[i--][j])ans[i]=j;
if(ans[1]==1||ans[1]==3)c[1]=1;
if(ans[1]==2||ans[1]==3)c[n]=1;
for(i=2;i<=n;i++){
if(ans[i]==1||ans[i]==3)c[i]=i;
if(ans[i]==2||ans[i]==3)c[i-1]=i;
}
for(i=1;i<=n;i++)printf("%d ",c[i]);
}
return 0;
}

  

BZOJ3749 : [POI2015]Łasuchy的更多相关文章

  1. [POI2015]Łasuchy

    [POI2015]Łasuchy 题目大意: 圆桌上摆放着\(n(n\le10^6)\)份食物,围成一圈,第\(i\)份食物所含热量为\(c_i\). 相邻两份食物之间坐着一个人,共有\(n\)个人. ...

  2. BZOJ 3749: [POI2015]Łasuchy【动态规划】

    Description 圆桌上摆放着n份食物,围成一圈,第i份食物所含热量为c[i]. 相邻两份食物之间坐着一个人,共有n个人.每个人有两种选择,吃自己左边或者右边的食物.如果两个人选择了同一份食物, ...

  3. BZOJ 3749: [POI2015]Łasuchy(贪心)

    Orz大佬博客 CODE #include <bits/stdc++.h> using namespace std; typedef long long LL; char cb[1< ...

  4. @bzoj - 3749@ [POI2015] Łasuchy

    目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...

  5. POI2015题解

    POI2015题解 吐槽一下为什么POI2015开始就成了破烂波兰文题目名了啊... 咕了一道3748没写打表题没什么意思,还剩\(BZOJ\)上的\(14\)道题. [BZOJ3746][POI20 ...

  6. [Poi2015]

    [POI2015]Łasuchy 一看以为是sb题 简单来说就是每个人获得热量要尽量多 不能找别人 首先这道题好像我自己找不到NIE的情况 很容易想到一个优化 如果一个数/2>另一个数 那么一定 ...

  7. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  8. BZOJ 4385: [POI2015]Wilcze doły

    4385: [POI2015]Wilcze doły Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 648  Solved: 263[Submit][ ...

  9. BZOJ 4384: [POI2015]Trzy wieże

    4384: [POI2015]Trzy wieże Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 217  Solved: 61[Submit][St ...

随机推荐

  1. Unity模型导入的若干问题

    原地址:http://tieba.baidu.com/p/2807225555 我觉得有三点感觉在导出时比较重要的1.单位的设置3dsmax系统单位设置就设成厘米显示单位公制也设成厘米这样在max里的 ...

  2. C++模板常用使用方法介绍

    转载:http://developer.51cto.com/art/201002/182202.htm C++编程语言中的模板应用在一定程度上大大提高了程序开发的效率.我们在这篇文章中为大家详细讲解一 ...

  3. ubuntu14.04安装chrome

    到https://www.google.com/chrome/browser/desktop/index.html可下载指定版本的deb文件. 32bit: wget https://dl.googl ...

  4. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码

    加入OpenStack社区 https://launchpad.net/,注册用户(597092663@qq.com/Admin@123) 修改个人信息,配置SSH keys.OpenPGP keys ...

  5. 在Java中>、>>、>>>三者的区别

    Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力 ...

  6. 转MYSQL学习(五) 索引

    索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型. 根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总 ...

  7. Java for LeetCode 066 Plus One

    Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...

  8. codeforces B. Levko and Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/361/B 题目意思:有n个数,这些数的范围是[1,n],并且每个数都是不相同的.你需要构造一个排列,使得这 ...

  9. UVALive 7261 Xiongnu's Land (扫描线)

    Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...

  10. Excel 关于新建xls文件 新建sheet 合并sheet的VBA操作代码

    Sub 合并一个文件夹下全部xls文件中sheet到一个xls的sheet()workDir = ThisWorkbook.Path '当前xls文件所在的目录绝对路径'MsgBox workDir, ...