Atcoder 2334 D
来源:互联网 发布:砍价网站源码 编辑:程序博客网 时间:2024/05/18 00:35
题目链接:http://abc055.contest.atcoder.jp/tasks/arc069_b?lang=en
D - 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
Submit
题意:动物园中只有狼和羊, 狼羊做成一个圈,输入一个字符串,如果是羊,表示真话,串中'o'表示是它的左右为同一物种,‘x’表示不同物种,如果是狼则相反,,问是否存在一种可能,满足上面的字符串,最后输出1-n位置的狼和羊
解析:刚看到这个题时,完全懵逼,这TM怎么模拟,后来看泰神博客才知道怎么写,就是枚举前两个动物,得出一个序列,判断下是否成立,成立的话输出即可,复杂度为4*n,就是O(n)
泰神博客:http://www.wonter.net/
代码:
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<map>#include<cmath>#define N 100009using namespace std;const int INF = 0x3f3f3f3f;char s[N];int ans[N];int nx[4] = {1, 1, 0, 0};int ny[4] = {1, 0, 0, 1};bool check(int a, int b, int n){ ans[0] = a; ans[1] = b; for(int i = 1; i < n - 1; i++) { if(s[i] == 'o') { if(ans[i]) ans[i + 1] = ans[i - 1]; else ans[i + 1] = !ans[i - 1]; } else { if(ans[i]) ans[i + 1] = !ans[i - 1]; else ans[i + 1] = ans[i - 1]; } } if(s[0] == 'o') { if(ans[0]) { if(ans[1] != ans[n - 1]) return false; } else if(ans[1] == ans[n - 1]) return false; } else { if(ans[0]) { if(ans[1] == ans[n - 1]) return false; } else if(ans[1] != ans[n - 1]) return false; } if(s[n - 1] == 'o') { if(ans[n - 1]) { if(ans[0] != ans[n - 2]) return false; } else if(ans[0] == ans[n - 2]) return false; } else { if(ans[n - 1]) { if(ans[0] == ans[n - 2]) return false; } else if(ans[0] != ans[n - 2]) return false; } return true;}int main(){ int n; scanf("%d %s", &n, s); for(int i = 0; i < 4; i++) { if(check(nx[i], ny[i], n)) { for(int i = 0; i < n; i++) { if(ans[i]) printf("S"); else printf("W"); } printf("\n"); exit(0); } } puts("-1"); return 0;}
- Atcoder 2334 D
- Atcoder D
- atcoder 055D D
- atcoder square869120Contest #4 D
- Atcoder ARC 077 D
- AtCoder-RC078 D
- AtCoder 079D Decrease
- atcoder-abc-070D
- atcoder 062D
- Atcoder arc 084 D
- [atcoder] agc86 D
- 【AtCoder】(AtCoder Grand Contest 006)D
- AtCoder AtCoder Beginner Contest 063 D
- atcoder AtCoder Regular Contest 084 D
- AtCoder Regular Contest 069 D
- Atcoder 056 D 贪心+二分
- Atcoder Grand Contest 013D
- AtCoder Regular Contest 073 D
- WAV文件格式(2)
- python爬虫(17)爬出新高度_抓取微信公众号文章(selenium+phantomjs)(下)(windows版本)
- 详解KMP算法
- OAuth2 认证流程
- 基于HTML5的canvas的温度计 插件
- Atcoder 2334 D
- 2.scala控制结构
- LEXIN
- qt中QImageQImage和Mat类型的转换
- OJ.2012: C语言实验——整数位
- 转化率分析的四个维度
- BeanFactory
- codeforce 748B
- JQuery两个时间大小的比较