AtCoder Regular Contest 069 D - Menagerie 枚举起点 递推
2017-02-20 01:37
495 查看
题意:一堆不明身份的动物排成一圈,身份可能是羊或狼,羊一定说实话,狼一定说假话。大家各自报自己的两边是同类还是不同类,问能否有一种满足每个人发言的方式。
解法:已知i-1和i-2可以推i,所以枚举起点羊羊、羊狼、狼羊、狼狼四种可能,最后拿第0只以及第n-1只动物的发言判断是否合法就行。
代码写得比较暴力。。。
解法:已知i-1和i-2可以推i,所以枚举起点羊羊、羊狼、狼羊、狼狼四种可能,最后拿第0只以及第n-1只动物的发言判断是否合法就行。
代码写得比较暴力。。。
#include <cstdio> int n; char s[100001],r[100001]; bool c(char a,char b) { r[0]=a;r[1]=b; for (int i=2;i<n;++i) r[i]=r[i-1]=='S'?s[i-1]=='o'?r[i-2]:r[i-2]=='S'?'W':'S':s[i-1]=='x'?r[i-2]:r[i-2]=='S'?'W':'S'; return !(r[n-1]=='S'&&((s[n-1]=='o'&&r[n-2]!=r[0])||(s[n-1]=='x'&&r[n-2]==r[0])))&& !(r[0]=='S'&&((s[0]=='o'&&r[1]!=r[n-1])||(s[0]=='x'&&r[1]==r[n-1])))&& !(r[n-1]=='W'&&((s[n-1]=='x'&&r[n-2]!=r[0])||(s[n-1]=='o'&&r[n-2]==r[0])))&& !(r[0]=='W'&&((s[0]=='x'&&r[1]!=r[n-1])||(s[0]=='o'&&r[1]==r[n-1]))); } int main() { scanf("%d%s",&n,s); puts(c('S','W')||c('W','S')||c('W','W')||c('S','S')?r:"-1"); return 0; }
相关文章推荐
- AtCoder Regular Contest 069 F - Flags 2-SAT+线段树优化建图
- 【2-SAT】【优化连边】【AtCoder Regular Contest 069 F】Flag
- AtCoder Regular Contest 069 D
- AtCoder Regular Contest 069 D
- AtCoder Regular Contest 066 F Contest with Drinks Hard
- AtCoder Regular Contest 058 D - Iroha and a Grid 组合数学
- AtCoder Regular Contest 077 E - guruguru 二阶差分
- AtCoder Regular Contest 092 C - 2D Plane 2N Points 贪心 匈牙利算法模板
- AtCoder Regular Contest 075 D Widespread
- AtCoder Regular Contest 093(AtCoder Beginner Contest 092)题解
- AtCoder Regular Contest 077 被虐记&题解
- 【构造】AtCoder Regular Contest 079 F - Namori Grundy
- AtCoder Regular Contest 079-E - Decrease (Judge ver.)
- AtCoder Regular Contest 061 E - すぬけ君の地下鉄旅行【最短路】
- 【Atcoder Regular Contest 085F】 NRE
- AtCoder Regular Contest 089 D - Checker 思维题、点的转移、二维前缀和
- AtCoder Regular Contest 090 D - People on a Line
- [AtCoder Regular Contest 072] E: Alice in linear land (arc072e)
- AtCoder Regular Contest 092 C - 2D Plane 2N Points 贪心 匈牙利算法模板
- AtCoder Regular Contest 092(部分)