POJについて

POJは北京大学が運営するオンラインジャッジシステムです.
Welcome To PKU JudgeOnline

余程のことがない限りPOJで問題を解くことはお勧めしません.ただ,人にはどうしてもPOJで解かないといけない時があるのです(蟻本とか).そんなときのために注意点を羅列しました.私がC++しか使えないので主にC++に関する内容です.

追記. drken さんによって蟻本のPOJ以外のサイトを使用した類題がまとめられています(AtCoder 版!蟻本 (初級編) - Qiita

プログラミング言語コンパイラのバージョンが古い

C++98ですので,C++11以降の機能は使えません.また,GCC4.4.0です.

  • #include <bits/stdc++.h> が使えない 👉 使うヘッダーを書く
  • auto が使えない 👉 頑張って長い文字数をタイピングする
  • usingエイリアステンプレートが使えない 👉 typedefを使う

最適化オプションが付いていない

最適化オプションが付いていないはず(参考元が見つけられない)なので高速化を頑張る必要があります.

  • 入出力cin, coutが遅い 👉 おまじない「cin.tie(0); ios::sync_with_stdio(false);」を使う 👉 printf, scanfを使う 👉 LayCurseさんの入出力を使う
  • vectorが遅い 👉 push_backを使わない 👉 生配列を使う 👉 グローバル変数にする
  • 多次元配列が遅い 👉 行と列を変える(キャッシュヒット率が上がる) 👉 1次元配列にする

POJがおかしい

  • POJにつながらない 👉 時々ある.回復するまで気長に待つ
  • ジャッジが機能していない(例:POJ3800) 👉 出典から他のオンラインジャッジに登録されてないか調べる
  • 問題文が曖昧 👉 よくあるのでエスパー力を鍛える(推測して間違えるを繰り返す)
  • どうしても通らない 👉 高速化する 👉 C言語(またはC++)を使用しているなら G++, GCC, C++, C の言語でサブミットする(実装によっては C++/C が通って G++/GCC が通らない問題がある 例: POJ1096) 👉 想定解法で高速化しても通らない場合がある(例:POJ2113).「悪いのはPOJだ」と3回呟いて寝る 👉 寝れない場合は嘘解法を頑張る(テストケースが弱いと嘘乱択で通る場合がある)

まとめ

POJで問題を解くことによって理不尽力が鍛えられます.一般的に理不尽力は鍛える必要はないので他のオンラインジャッジシステムを使いましょう.

追記.
POJ用に時々書くと,プログラミング言語って使いやすいように成長してるんだな〜自分も成長しなきゃ,という気になってくるのでオススメ?です.