競技プログラミング 問題の解き方

「いかにして問題をとくか」から学ぶACへの道しるべ

2023年09月03日

いかにして問題をとくかは数学の問題の解き方・考え方を記した本です。

読んでいて競プロでも使えるんじゃないか?と思ったため、「いか問」の主要なアイデアを羅列してみます。

4つの区分

まず問題を解くには4つの区分があります。

  1. 問題を理解する
  2. 解を得るために計画を立てる
  3. 計画を実行する
  4. 得られた解を振り返る

問題を理解する

問題を理解するにあたって、最も基礎的な手順は次のようになります。

  • 未知のものは何か
  • 与えられているものは何か
  • 条件は何か

まだうまく理解できないときはさらに次のことを行うと良いです。

  • 図を書け
  • 適当な記号を導入せよ
  • 条件の各部を分離せよ

計画を立てる

ここが問題を解くうえで肝になる最も難しい部分で、それゆえに様々なアプローチを試みる必要があります。

  • 関連した問題を知っているか
    • 未知数が同じか似ている問題を知っているか
    • 問題を違った形に言い換えることができるか
  • 解けなければ、まず適当な補助問題を解け
    • もっとやさしくて似た問題
    • もっと一般的な問題
    • もっと特殊な問題
  • 与えられたものは全て使ったか、条件は全て考慮したか
    • 条件の一部を残して他の部分を捨てると、条件を満たせるか

計画を実行する

もっとも刺さったフレーズはこれです。

「必要なのは主に忍耐だけである」

  • 各段階について、その段階が正しいことをはっきり理解できるか。あるいは正しいことを証明できるか。

振り返ってみる

  • 結果が正しいかどうか試すことができるか
  • 同じ結果を違った仕方で導くことができるか
    • すべてのデータを使ったか
    • 入力が十分小さいとき、あるいは十分大きいときに解は正しいか
  • 解答をできるだけ簡単にするよう努めよ