AtCoder 2334 枚举
来源:互联网 发布:半自动咖啡机 知乎 编辑:程序博客网 时间:2024/05/17 23:14
Menagerie
Time limit : 2sec / Memory limit : 256MB
Score : 500 points
Problem Statement
Snuke, who loves animals, built a zoo.
There are N animals in this zoo. They are conveniently numbered 1 through N, and arranged in a circle. The animal numbered i(2≤i≤N−1) is adjacent to the animals numbered i−1 and i+1. Also, the animal numbered 1 is adjacent to the animals numbered 2 and N, and the animal numbered N is adjacent to the animals numbered N−1 and 1.
There are two kinds of animals in this zoo: honest sheep that only speak the truth, and lying wolves that only tell lies.
Snuke cannot tell the difference between these two species, and asked each animal the following question: "Are your neighbors of the same species?" The animal numbered i answered si. Here, if si is o
, the animal said that the two neighboring animals are of the same species, and if si is x
, the animal said that the two neighboring animals are of different species.
More formally, a sheep answered o
if the two neighboring animals are both sheep or both wolves, and answered x
otherwise. Similarly, a wolf answered x
if the two neighboring animals are both sheep or both wolves, and answered o
otherwise.
Snuke is wondering whether there is a valid assignment of species to the animals that is consistent with these responses. If there is such an assignment, show one such assignment. Otherwise, print -1
.
Constraints
- 3≤N≤105
- s is a string of length N consisting of
o
andx
.
Input
The input is given from Standard Input in the following format:
Ns
Output
If there does not exist an valid assignment that is consistent with s, print -1
. Otherwise, print an string t in the following format. The output is considered correct if the assignment described by t is consistent with s.
- t is a string of length N consisting of
S
andW
. - If ti is
S
, it indicates that the animal numbered i is a sheep. If ti isW
, it indicates that the animal numbered i is a wolf.
Sample Input 1
6ooxoox
Sample Output 1
SSSWWS
For example, if the animals numbered 1, 2, 3, 4, 5 and 6 are respectively a sheep, sheep, sheep, wolf, wolf, and sheep, it is consistent with their responses. Besides, there is another valid assignment of species: a wolf, sheep, wolf, sheep, wolf and wolf.
Let us remind you: if the neiboring animals are of the same species, a sheep answers o
and a wolf answers x
. If the neiboring animals are of different species, a sheep answers x
and a wolf answers o
.
Sample Input 2
3oox
Sample Output 2
-1
Print -1
if there is no valid assignment of species.
Sample Input 3
10oxooxoxoox
Sample Output 3
SSWWSSSWWS
题意:
给出N只动物,第i只和第i-1,i+1只相邻,(1和N,2相邻,N和N-1,1相邻)
动物的种类只有两种,说真话的羊和说假话的狼,si 为 'o'表示第i只动物说与它相邻的动物为同种动物
si为'x'表示第i只动物说与它相邻的动物为不同种动物,求是否存在动物序列满足给出的si,
存在输出合法的动物序列'S'表示羊,'W'表示狼,不存在输出'-1'
题解:我们可以枚举第一位和第二位,只有四种情况,羊羊,羊狼,狼羊,狼狼,那么由前两个可以推出来第三个,第四个。。。。
最后check一下就行了
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[100005];int ans[100005],n;int check(){int flag=1,i;for(i=1;i<=n;i++){int l=i-1,r=i+1;if(l==0)l=n;if(r==n+1)r=1;if(ans[i]==1){if(s[i]=='o'&&ans[l]!=ans[r])return 0;if(s[i]=='x'&&ans[l]==ans[r])return 0;}else{if(s[i]=='o'&&ans[l]==ans[r])return 0;if(s[i]=='x'&&ans[l]!=ans[r])return 0;}}return 1;}void work(){for(int i=2;i<n;i++){if(ans[i]==1){if(s[i]=='o')ans[i+1]=ans[i-1];else ans[i+1]=(ans[i-1]==1?2:1);}else{if(s[i]=='o')ans[i+1]=(ans[i-1]==1?2:1);else ans[i+1]=ans[i-1];}}}int main(){int flag=0,i;scanf("%d",&n);scanf("%s",s+1);ans[1]=ans[2]=1;work();if(check()){for(i=1;i<=n;i++)printf("%c",ans[i]==1?'S':'W');printf("\n");return 0;}ans[1]=ans[2]=2;work();if(check()){for(i=1;i<=n;i++)printf("%c",ans[i]==1?'S':'W');printf("\n");return 0;}ans[1]=1;ans[2]=2;work();if(check()){for(i=1;i<=n;i++)printf("%c",ans[i]==1?'S':'W');printf("\n");return 0;}ans[2]=1;ans[1]=2;work();if(check()){for(i=1;i<=n;i++)printf("%c",ans[i]==1?'S':'W');printf("\n");return 0;}printf("-1\n");return 0;}
- AtCoder 2334 枚举
- Atcoder 045 -二进制枚举
- Atcoder 2334 D
- AtCoder
- AtCoder
- AtCoder
- AtCoder
- AtCoder
- Atcoder
- Atcoder Beginner Contest 55 D Menagerie (枚举+验证)
- AtCoder Regular Contest 069 D - Menagerie 枚举起点 递推
- Atcoder 045
- Atcoder#53
- Boxes AtCoder
- Atcoder D
- Atcoder Together
- 【AtCoder】(AtCoder Grand Contest 006)D
- 【AtCoder】(AtCoder Grand Contest 004)E
- python利用MySQLdb操作远程数据库
- 1081. Rational Sum (20)
- 基于canvas的二维码邀请函生成插件
- java集合框架介绍
- PAT-B 1014. 福尔摩斯的约会 (20)
- AtCoder 2334 枚举
- appium(四)交互分析
- 小米魅族系统遇到的6.0权限不弹窗问题
- 使用forever运行nodejs应用
- openssl关于des算法
- Spark立体全方位表鉴权
- 网络流(EK)
- 1084. Broken Keyboard (20)
- Docker入门实战