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(2iN1) is adjacent to the animals numbered i1 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 N1 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

  • 3N105
  • s is a string of length N consisting of o and x.

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 and W.
  • If ti is S, it indicates that the animal numbered i is a sheep. If ti is W, it indicates that the animal numbered i is a wolf.

Sample Input 1

Copy
6ooxoox

Sample Output 1

Copy
SSSWWS

For example, if the animals numbered 12345 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.

b34c052fc21c42d2def9b98d6dccd05c.png

Sample Input 2

Copy
3oox

Sample Output 2

Copy
-1

Print -1 if there is no valid assignment of species.


Sample Input 3

Copy
10oxooxoxoox

Sample Output 3

Copy
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;}


0 0
原创粉丝点击