http://codeforces.com/contest/877/problem/A
文字列Sがある。
この文字列に"Danil", "Olya", "Slava", "Ann", "Nikita"のうちいずれかが丁度1つあるか判定せよ。
len(S)≦100
解法
http://codeforces.com/contest/877/submission/31667307
"Danil", "Olya", "Slava", "Ann", "Nikita"の個数をカウントして丁度1ならYESという実装にした。
追記: システムテスト落ちたので修正
http://codeforces.com/contest/877/submission/31634738
落ちた原因はstringのlengthメソッドのsize_t型。
size_tは条件式の中で使うとおかしなことにあることで有名。
どういう落とし穴があるかはyukicoderのこの問題の解説が詳しい
string S; string dic[5] = { "Danil", "Olya", "Slava", "Ann", "Nikita" }; //--------------------------------------------------------------------------------------------------- #define yes "YES" #define no "NO" string solve() { int N = S.length(); int c = 0; rep(j, 0, 5) { int m = dic[j].length(); rep(i, 0, N - m + 1) { int ok = 1; rep(k, 0, m) if (S[i + k] != dic[j][k]) ok = 0; if (ok) c++; } } if (c == 1) return yes; return no; } //--------------------------------------------------------------------------------------------------- void _main() { cin >> S; cout << solve() << endl; }