競技プログラミングとは
競技プログラミングでは、一般的なプログラミングとは求められるものが違います。
競技プログラミングで求められるのは、いかに早く正しいプログラムが作れるのかということです。
保守やセキュリティ、再利用などは考える必要はありません。
そのため、危険な関数 (例 scanf) を使うのに躊躇する必要はありませんし、汎用性を考える必要性もありません。ただし、普通のプログラミングでそれを行なってしまうと問題なので、しっかりと区別して書けなくてはいけません。
競技プログラミングに適した言語
結論を言うと、C++ もしくは Java です。
C言語が含まれていませんが、これには理由があります。
まず、C言語の機能は C++ に含まれているので、機能面でC言語を選択するメリットはありません。*1
さらに、C言語の標準ライブラリは、プロコンで戦うにはあまりにも貧弱です *2。
そのため、本格的に競技プログラミングを始めようというならば、C言語でプロコンに出場しようとは考えないでください。
ではなぜ、C++, Java であるかというと、理由は簡単で、プロコンでそう指定されているためです。
多くのプログラミングコンテストでは、C/C++/Java が利用できるようになってます。*3
その他の言語が利用できる場合もありますが、覚えたとしても大会によっては利用できない可能性があります。
そのため、プロコンのために覚えるにはオススメしません。
C++, Java はそれぞれ長所短所があります。
どちらの言語でしか解けない問題があるということはありませんので、どちらでも構いません。
両方を使い分けるというのもいいですが、それはどちらかを十分に競技プログラミングで使えるようになってから考えましょう。
C++
長所
- コーディング量が少なくて済む (事が多い)
- (プロコン向けの) 参考書、参考サイト、解答例が豊富
短所
- (Java に比べ) 標準ライブラリが貧弱
- 言語仕様自体が複雑
Java
実行時間は C++ に劣りますが、同じアルゴリズムであれば、基本的に有利不利はないように調整されています。
AOJ では、C/C++ の2倍の時間をタイムリミットにしているそうです。
長所
- 標準ライブラリが豊富
- (C++ に比べて) 言語仕様が分かりやすい (と言われている)
短所
- コーディング量が多くなりがち
- (プロコン向けの) 参考書、参考サイト、解答例が少ない