Codeforces Gym 100814J Game 简单博弈

来源:互联网 发布:mac steam玩windows 编辑:程序博客网 时间:2024/05/21 03:25

题目大意:

就是现在初始的时候有一个字符串S, 长度不超过10000

两个人轮流操作

每次可以选择从左向右将连续两个字符按照给出的矩阵进行变化

或者选择从右往左

如果最后剩下的是元音字母则Salah获胜, 否则Marzo获胜

Salah先手问谁会获胜


大致思路:

比较水, 考虑到S在每次变换之后长度都会接近减半, 于是可以直接dfs暴力搜索

记下当前串以及当前轮到谁即可


代码如下:

Result  :  Accepted     Memory  :  148 KB     Time  :  31 ms

/* * Author: Gatevin * Created Time:  2015/11/21 16:25:41 * File Name: Sakura_Chiyo.cpp */#include<iostream>#include<sstream>#include<fstream>#include<vector>#include<list>#include<deque>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cctype>#include<cmath>#include<ctime>#include<iomanip>using namespace std;const double eps(1e-8);typedef long long lint;int T;char s[30][30];char get(char c1, char c2){    return s[c1 - 'a'][c2 - 'a'];}bool isVowel(char c){    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';}int dfs(string now, char who){    int sz = now.size();    if(sz == 1 && isVowel(now[0]))        return 1;    if(sz == 1 && !isVowel(now[0]))        return 0;    string left , right;    for(int i = 0; i + 1 < sz; i += 2)        left.push_back(get(now[i], now[i + 1]));    if(sz & 1) left.push_back(now[sz - 1]), right.push_back(now[0]);    for(int i = (sz & 1); i < sz; i += 2)        right.push_back(get(now[i], now[i + 1]));    int L = dfs(left, who == 's' ? 'm' : 's'), R = dfs(right, who == 's' ? 'm' : 's');    if(who == 's')    {        if(L == 1 || R == 1) return 1;        return 0;    }    else    {        if(L == 0 || R == 0) return 0;        return 1;    }}int main(){    ios::sync_with_stdio(0);    cin>>T;        while(T--)    {        string tmp;        for(int i = 0; i < 26; i++)        {            cin>>tmp;            for(int j = 0; j < 26; j++)                s[i][j] = tmp[j];        }        string in;        cin>>in;        printf("%s\n", dfs(in, 's') ? "Salah" : "Marzo");    }    return 0;}/*1daeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaa*/



0 0