ABC048 D An Ordinary Game 苦手なんじゃ(´・ω・`)
ABC048 D An Ordinary Game 苦手なんじゃ(´・ω・`)
問題概要
リンク参照
考察
- ゲーム問題苦手すぎる
- えーーおそらくこういう問題は簡単なケースを実験してそこから類推していく感じだと(これ直感で解ける人天才では?)
- ゲーム系問題が考察により奇偶判定になる場合もあるのでそこらへんも頭に浮かべながら進める
- "abc","aba","abca","abcd"くらいのケースが基本パターンになりそう
- 「奇数長と先頭と末尾が違う」,「奇数長と先頭と末尾が同じ」,「偶数長と先頭と末尾が同じ」,「偶数長と先頭と末尾が違う」に分かれる
- 勝つ人はそれぞれ先手,後手,後手,先手になる
- 間に1文字追加されたら勝者は反転するように見える(実験から分かってきた~(≧◇≦))
- これをうまく判定できる演算になんと,XORがある(・∀・)
- 「先頭と末尾の文字が同じ」XOR「奇数長である」が偽ならば後手必勝となる
- 非常に🌲びしい
ソースコード
#include<iostream> #include<vector> #include<algorithm> #include<cctype> #include<utility> #include<string> #include<cmath> #include<cstring> #include<queue> #include<map> #include<set> #include<climits> #define REP(i, n) for(int i = 0;i < n;i++) #define REPR(i, n) for(int i = n;i >= 0;i--) #define FOR(i, m, n) for(int i = m;i < n;i++) #define FORR(i, m, n) for(int i = m;i >= n;i--) #define SORT(v, n) sort(v, v+n); #define VSORT(v) sort(v.begin(), v.end()); #define llong long long #define pb(a) push_back(a) using namespace std; /******************************************************************************************/ int main() { cin.tie(nullptr); ios::sync_with_stdio(false); string s; cin >> s; bool flag1 = (s[0] == s.back()); bool flag2 = (s.size() % 2 == 1); if(flag1^flag2){ cout << "First" << endl; } else { cout << "Second" << endl; } return 0; }