60分自律解答

概要

JOI本選の問題を60分間、完全自律で解く練習。
ボスからの返信はない。自分で判断して動け。


時間管理ルール(厳守)

開始時の記録(必須)

問題を受け取ったら、最初に以下のコマンドを実行

echo "開始時刻: $(date '+%Y-%m-%d %H:%M:%S')" && echo "終了予定: $(date -v+60M '+%Y-%m-%d %H:%M:%S')"

出力例:

開始時刻: 2026-01-05 11:15:00
終了予定: 2026-01-05 12:15:00

この「終了予定」時刻を必ずメモし、以降の時間確認に使う。

60分経過の確認(厳守)

解説を見る前に、以下のコマンドで時間を確認:

date '+%Y-%m-%d %H:%M:%S'
確認ルール:
  • 現在時刻が「終了予定」を過ぎていなければ、絶対に解説を見ない
  • 「だいたい60分」「たぶん経過した」という判断は禁止
  • 必ず date コマンドで確認してから解説を見る

運用手順

Phase 1: 自律解答(60分間)

1. 開始時刻を記録

echo "開始時刻: $(date '+%Y-%m-%d %H:%M:%S')" && echo "終了予定: $(date -v+60M '+%Y-%m-%d %H:%M:%S')"

2. 問題を解く

  • ボスが問題を指定
  • 60分間、ボスからの返信はない
  • 該当年度の過去問ファイルは参照禁止(解説が入っているため)
  • プロトコル・ナレッジファイル(00〜06)は参照OK
  • 別年度の過去問は参照OK
  • サンプルテストを自分で実行して確認

サンプル確認ルール(重要)

過去問ファイルのサンプルはハルシネーションしている可能性がある。
必ずAtCoderで正しいサンプルを確認してからテストする。

Phase 1.5: サンプル通過後の追加検証

サンプルテストが全通過しても、60分経過前なら解説を見ずに以下を実施

  1. 「解説前の最終版」として保存
    cp solution.cpp solution_before_answer.cpp
  2. 境界値テスト
    • 制約の最小値(N=1, M=0 など)で動作確認
    • 制約の最大値付近でTLEしないか確認
  3. コーナーケーステスト
    • 全て同じ値のケース
    • 昇順・降順に並んでいるケース
    • 答えが0や空になるケース
  4. コード見直し
    • オーバーフローの可能性(int→long long)
    • 計算量の再確認(制約上限で間に合うか)
    • 不要な処理・冗長なコードがないか
60分経過まで改善ループを続ける。解説は絶対に見ない。

Phase 2: 60分経過後

解説を見る前に必ず時間確認!

date '+%Y-%m-%d %H:%M:%S'
  1. サンプルテストが全通過していれば「解けた」
    • コードを出力して終了
  2. 解けていなければ解説を参照
  3. 解説を見て自力で解く(必須!元のコードを使い回さない)
    • 解説の考え方を理解
    • 解説の解法に基づいて新しくコードを実装
    • 元の非効率なコードをそのまま提出しない

Phase 3: 再発防止策の出力

必ず以下を出力:

  1. 何が足りなかったか
    • なぜ60分で解けなかったのか
    • どこで詰まったのか
    • 何を見落としていたのか
  2. 今後の再発防止策
    • 具体的な手順として書く
    • 「〇〇を行う」「〇〇のステップに沿って進める」「〇〇はしない」の形式
    • 抽象的な反省(「甘かった」「できなかった」)はNG
  3. プロトコルへの追加提案

判定基準

  • サンプルテスト全通過 → 解けた
  • 提出はボスが手動で行う(手動提出支援を使用)

AtCoder手動提出支援

提出支援コマンド

cd /Users/takuhirokosa/JOI
./submit.sh <年度> <問題番号> <ソースファイル>

動作:

  1. ソースコードをクリップボードにコピー
  2. AtCoderの提出ページを自動で開く
  3. ボスがCmd+Vで貼り付けて「提出」ボタンをクリック

問題番号対応

問題番号対応
a問題1
b問題2
c問題3
d問題4
e問題5

年度対応(重要)

AtCoderのコンテスト年度は「終了年」を使用:

  • JOI 2023/2024 本選 → 2024
  • JOI 2022/2023 本選 → 2023