競技プログラミング用 知識集積所

ABC404A - Not Found

最終更新:

sport_programming

- view
管理者のみ編集可


問題


A問題としては超難問。注意。

必要知識


考え方

まずは入力内容を確認。
入力内容は文字列なので、string型変数を用意してcinで受け取る。

解き方はいくつかあるが、A問題なので愚直にやろうとすると、
  • aがないならaと答える
  • そうでない場合で、bがないならbと答える
  • そうでない場合で、cがないならcと答える
  • 以下略
としたいところ。

ということで、まず
for (char c='a'; c<='z'; c++) {
  // ここに書き足す
}
というchar型ループの枠を作る。
次に中に「条件を満たすならcを出力してループ終了」を作る。
for (char c='a'; c<='z'; c++) {
  bool flag;
  // ここに書き足す
  if (flag) {
    [[cout]] << c << endl;
    break;
  }
}
最後に、cが文字列の中にあるかを判定。
大量の判定のうち1つでも成り立てばダメ、という形なので、複雑な判定条件のコツ(未作成)を参考に、trueで初期化して判定に引っかかったらfalse化する処理をforループで回す。
for (char c='a'; c<='z'; c++) {
  bool flag = true;
  for (int i=0; i<n; i++) {
    if (s.at(i)==c) flag = false;
  }
  if (flag) {
    cout << c << endl;
    break;
  }
}

解答例


注意点

解けなくても泣かない。

A問題で出ていい難易度の問題ではない。
ここ4回の正答率(1回でも提出した人のうち、最終的にACできた割合)とペナルティ率(1回でもペナルティをもらった人の割合)は、以下。
正答率 ペナ率
401A 99.39% 10.24%
402A 99.33% 4.72%
403A 99.27% 6.54%
404A 97.65% 14.09%
ベテランまで含めても、7人に1人がペナルティをもらい、40人に1人くらいは最後まで解けていない(一度も提出できなかった人を含めれば、解けていない人はおそらくもっと多い)。
競プロ始めたてでA問題練習中の人が、解けなくても仕方がない。

別解

公式解説にたくさんあるのでそれらを参照。

ウィキ募集バナー