軽い質問なので軽い感じで書かせていただきます。
競プロ界隈ではだいたいC++が一番多くて次点でPython(PyPy含む)みたいな勢力図なのかなぁと勝手に思っているのですが、皆さんはこの二択を迫られた場合はどうされますか?
個人的にはC++よりPythonで実装したほうが開発時間が大幅に短縮される気がするのでTLE吐かれない限りはPython使うのはかなりアリな選択肢何じゃないかと思ってます。C++はまだほとんど使ったことないんですが調べた感じだとやはりPythonの方がライブラリが豊富で気にしなければいけないことも少なそうな印象で結構開発時間に差が出るんじゃないかなって思うんですけど、要は慣れの問題でC++でもPythonなどのスクリプト言語にそう大差つけられずにさくっと実装できるもんなんですか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
自分は競プロは teratail の質問に回答するときぐらいしか問題を解いたりはしないので、参考にならないかもしれませんが、普段 Python、C++ を使っています。
競プロ界隈ではだいたいC++が一番多くて次点でPython(PyPy含む)みたいな勢力図なのかなぁと勝手に思っているのですが、皆さんはこの二択を迫られた場合はどうされますか?
個人的にはC++よりPythonで実装したほうが開発時間が大幅に短縮される気がするのでTLE吐かれない限りはPython使うのはかなりアリな選択肢何じゃないかと思ってます。
競プロを通してなにを学びたいかによるのではないでしょうか。
言語の勉強を兼ねるなら、その言語で競プロをやると、言語仕様やライブラリにも詳しくなれるのでいいのではないでしょうか。(Python 使えるようになりたいなら Python)
アルゴリズムの勉強をメインにするなら、Python より C++ を選択することをおすすめします。
理由は、Python はライブラリが充実してるためそれらを活用するとアルゴリズムの実装の勉強にはならないということと、Python は C++ に比べて100倍ぐらい遅いため、Python の標準ライブラリを使わないで、愚直に for 文を書いたりすると、アルゴリズムは全く同じでも TLE になったりします。
TLE にならないためには、内包記法を使う、numpy や標準ライブラリを使うとかアルゴリズムの計算量とは関係ない部分で高速化に気を使う必要が出てきます。
numpy や標準ライブラリを使うほうがなぜ早いのかというと、それらは C で書かれていて、Python からはそのコードを呼び出しているだけだからです。(計算量は全く同じでも for で加算するより sum() を使うほうが早い)
なので、Python で高速化するにはできるだけ Python 上でコードが実行されないようにするという本末転倒?なことになります。
要は慣れの問題でC++でもPythonなどのスクリプト言語にそう大差つけられずにさくっと実装できるもんなんですか?
競プロを解くために必要なコード量は数十行 ~ 百行程度なので、その言語に同程度に習熟していると仮定するならば、C++ と Python どちらで書いてもコーディングにかかる労力はさほど変わらないと思います。
投稿2020/09/02 15:29
編集2020/09/02 15:50総合スコア21956
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 20:07
2020/09/03 02:27 編集
2020/09/03 13:24
0
C++がよく使われる理由は以下の通りです。
・回せるループ回数が多い(10の8乗回程度)
・参考コードが多い
・解説がだいたいC++
逆に、Pythonを使わない理由は以下の通りです。
・回せるループ回数が少ない(10の6乗程度)
・標準入力、標準出力が遅い
主にループ回数の違いが大きい要因ですが、これはアルゴリズム次第で解決できます。
しかし、解くまでの時間が評価に大きく影響する競プロでは全探索でサクッと実装した方が良い場面が多いです。
ただ、全探索するとなるとループ回数がネックになってしまうため、回せるループの回数が多いC++を自然と採用せざるを得なくなります。
私がC++をよく使っているので、C++よりの話をしました。
が、PyPyを使う前提であれば、PythonかC++かは気にしなくても大丈夫です。
PyPyとC++ではループ回数に大きな差はありません。
投稿2020/09/02 16:03
総合スコア305
0
軽い質問なので軽い感じで書かせていただきます。
軽い回答なので軽い感じで書かせていただきます。
数年前に1度入門JAVAとpython3を勉強してブランク空けて最近C++を1から勉強しつつAOJとAtCoderやり始めた初心者です。
まず大前提ですが私は実務でプログラミングしているわけではなくただの趣味です。
ぶっちゃけやれる言語がpython3しかないならとりあえずやっちゃえば?
というのが質問を見た正直な感想です。
百花繚乱!なないろ言語で競技プログラミングをする資料まとめ
探せばいくらでもありますが簡単な練習問題からやってみて何か苦しいと感じたら新しい言語に切り替えるくらいの軽い気持ちでさっさとやり始めたほうが良いと思います。
TLE吐かれない限り
というキーワードが出るということは使い方によってはpython3が遅いという認識はあるかと思います。
実際に教プロ+言語で検索すれば大体C++をおすすめされることになるかと思います。
ただトレンドとしてはpython3が初学者や学生に人気なのはteratailやQiitaのタグ上位を見れば一目瞭然です。
あくまでも個人的な推測に過ぎませんが運営側もpython3利用者が増えていることを考慮せざるを得ない状況になっているだろうし対策などもされていることかと思います。
要は慣れの問題でC++でもPythonなどのスクリプト言語にそう大差つけられずにさくっと実装できるもんなんですか?
さくっと実装できるかは人によるとしか言いようがないかと。
最後に、個人的にC++を選んだのは趣味で教プロやるのに解説や動画がC++で情報が多いという理由だけです。
書きやすさなら多分python3のが書きやすいです。
投稿2020/09/02 15:00
総合スコア303
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。