問題
http://codeforces.com/contest/691/problem/B
文字列sが与えられる。
この文字列の中心(奇数個であれば、その文字のちょうど真ん中)でちょうど左右が鏡写しになっているとき"TAK"と出力する。
そうでないなら"NIE"と出力。
1 <= |s| <= 10^3
考察
1. 微妙にクソ問な感じがする
2. まず鏡写しの文字を考えると、以下のとおり
A | A b | d H | H I | I i | i l | l M | M O | O o | o p | q T | T U | U V | V v | v W | W w | w X | X x | x Y | Y
3. 文字列が奇数個であれば、その文字自体が鏡写しのものが中心にくる必要がある。それは以下のとおり
A H I i l M O o T U V v W w X x Y
4. これをチェックするだけ
実装
http://codeforces.com/contest/691/submission/19101050
string s; //----------------------------------------------------------------- string rev_pair[2] = { "AbdHIMOopqTUVvWwXxY", "AdbHIMOoqpTUVvWwXxY" }; string rev_self = "AHIMOoTUuVvWwXxY"; string solve() { int n = s.length(); if (n % 2 == 1) { if (rev_self.find(s[n / 2]) == string::npos) return "NIE"; } rep(i, 0, n / 2) { int j = rev_pair[0].find(s[i]); if (j == string::npos) return "NIE"; if (s[n - 1 - i] != rev_pair[1][j]) return "NIE"; } return "TAK"; } //----------------------------------------------------------------- int main() { cin >> s; cout << solve() << endl; }