How To Start Competitive Programming (English subtitles)

Поделиться
HTML-код
  • Опубликовано: 21 окт 2024

Комментарии • 37

  • @evimalab
    @evimalab  Год назад +31

    Q. C++がPythonより有利なのはAtCoderでどのくらいのレーティングから?移行のタイミングは?
    A. レーティングが4桁になる頃からC++の方が有利だと思いますが、
    移行のタイミングはもう少し早めをおすすめします(400~1000のどこか)。
    以下、詳しく書きます(非常に長いです)。
    まず、Pythonが不利になるような問題の例をもう少し挙げます。
    致命的に不利な例:
    atcoder.jp/contests/abc322/tasks/abc322_f [Difficulty 1806 (執筆時点)]
    本番中のPythonでの正解者がいませんでした(コンテスト後にはいますが…)。
    中程度に不利な例:
    atcoder.jp/contests/abc324/tasks/abc324_f [1815]
    動画で挙げた例です。int→floatの変換を繰り返したりすると時間切れのおそれがあります。
    atcoder.jp/contests/abc322/tasks/abc322_d [1310]
    atcoder.jp/contests/abc307/tasks/abc307_c [1307]
    全探索の方針次第ではC++でないと間に合いません(ABC-Cでここまでの問題が出ることは稀ですが)。
    少し不利な例:
    atcoder.jp/contests/abc325/tasks/abc325_c [400]
    こちらは普通のABC-Cですが、Pythonで再帰でDFSを書くと時間もメモリも足りなくなります
    (スタックでの書き換えは難しくありませんが)。
    この程度にしておきます。
    このような問題の存在を考慮して、PythonがC++(など)に比べて有利か不利かを色ごとにまとめると、
    およそ次のようになるでしょう。
    灰 (1~399): 有利
    茶 (400~799): 少し有利~互角
    緑 (800~1199): 互角~少し不利
    水 (1200~1599): 少し~中程度に不利
    青 (1600~1999): 不利
    黄~ (2000~): null(論じる価値なし)
    しかし、Pythonでの競技に慣れきってしまうと移行が難しくなるため、早めの移行をおすすめします。
    (移行というのはメイン言語の移行という意味で、移行後もPythonが使える問題では使って構いません。)
    以下、各色のPythonメインの人に対してコメントします。
    黒 (0、これから始める):
    動画で話した通り、
    「競技以外のプログラミングに興味があるか」「あとでメイン言語を乗り換えることになってもいいか」
    のどちらかへの答えがNoならほぼ確実にC++で始めるべきで、両方YesでもC++で始めても構いません。
    灰 (1~399):
    Pythonメインで続けて問題ありません。
    しかし、もし移行したくなったら移行してしまって構いません。
    茶 (400~799):
    まだまだPythonメインで続けても構いませんが、この辺りからC++のメリットが出てきます。
    茶色到達時が最初のちょうどいい移行タイミングでしょう。
    他のタイミングでも、Pythonに一度でも不便を感じたら積極的に移行を検討するべきです。
    緑 (800~1199):
    そろそろPythonの雲行きが怪しくなってきます。
    緑到達時は多くの人にとって無難な移行タイミングでしょう。
    そこで移行しなかったら、レーティング1000に到達したあたりでもう一度検討してください。
    目標が水色 (1200) でそこで競技をやめるという場合は、Pythonで走り切ってもいいでしょう。
    水 (1200~1599):
    ここまで来ると、JavaやC#以上の速度の言語を使えないことは弱点の一つになります。
    まだ競技を続けるなら、ほぼ問答無用で移行するべきといえる段階です。
    青 (1600~1999):
    上で見た通り、ここまで来ると解くべきキー問題がPythonで解答困難だったりします。
    縛りプレイをしているのでなければ、いますぐ移行しましょう。
    黄~ (2000~):
    これを真面目に読んでいる人にこのレンジの人はいないでしょう。
    (補足:筆者は2023年現在もAtCoderで出題しています。プロコンへの出題は2013年から行っています。)

    • @zouo-from-Taikonotatsujin
      @zouo-from-Taikonotatsujin 5 месяцев назад +1

      全問題python使用している人の中での最大レート値はわかりますか?

  • @evimalab
    @evimalab  Год назад +12

    何でも質問してください。(動画の内容から少し逸れていても構いません。)
    Please feel free to ask anything. (Even if it deviates a bit from the content of the video.)

    • @swap_paws
      @swap_paws 5 месяцев назад

      わかりやすい解説動画をたくさんあげていただきありがとうございます。とても助かっています。
      もしよろしければ、をincludeする手順を教えてほしいです。

  • @クルイ-j4r
    @クルイ-j4r 8 месяцев назад +13

    すぐに親切なチャンネルだと感じました。

    • @evimalab
      @evimalab  8 месяцев назад +3

      温かいお言葉ありがとうございます!励みになります。

  • @256yayo
    @256yayo Год назад +5

    楽しみに待ってました。

  • @みーなですー
    @みーなですー 8 месяцев назад +4

    大学4年で、来年からエンジニア職に就くものです(たぶん)
    のんびりPythonでAtcoderをやってきてC問題がギリギリ解けるか解けないかレベルなのですが
    将来のことを考えるとJavaやC++に移行しておいたほうが良いでしょうか?
    もちろんその職場の環境にはよるんですけど・・・

    • @evimalab
      @evimalab  8 месяцев назад +4

      「職場の環境による」で正しいと思いますが、未定のようなので以降は基本的に競技プログラミングについてだけ考えます。
      「将来のことを考えるとPythonからJavaやC++に移行しておいたほうが良い」も基本的に正しいと思います。
      (競技のことだけ考えると、どうせ移行するならメジャーなC++がベターといえますが、Javaを選ぶ理由があればJavaでも十分です。)
      ただ、ABC-Cが五分五分という段階だとこれらの言語の恩恵は少ないでしょう(Pythonだと少し不利になる問題が現れるのはABC-Fあたりからで、決定的に不利になる問題はABCにはほとんどありません)。
      正直なところ、判断が難しいラインです。
      とはいえ、Pythonでの競技に慣れきってしまうと移行しづらくなるでしょうから、どちらかというといま移行した方がいいかもしれません。

  • @川田康弘-u5v
    @川田康弘-u5v 9 месяцев назад +6

    少し飛んだ質問になるのですが、C++でGUI系を作るために画面上にウィンドウを表示させたいと思い、というinclude?にたどり着いたのですが、エラーが起き、どうもこれはWindows固有のAPIなのでLinux上の環境だと動作できないということになるんでしょうか?

    • @evimalab
      @evimalab  9 месяцев назад +6

      はい、windows.h はWindows専用です。
      LinuxでGUI開発をするには、他のライブラリやフレームワーク(Qt、GTK、wxWidgetsなど)が必要そうです。

  • @623psiki5
    @623psiki5 6 месяцев назад +3

    プログラミング自体初心者はまず参考書から始めるべきですか?
    (自分はC++とpythonやってたがしばらく離れてた上に競プロは初心者レベル)
    C++とpythonを理解するためどちらでもやって緑にもなりたいです

    • @evimalab
      @evimalab  6 месяцев назад +1

      そもそも、競技プログラミングはプログラミング言語自体を理解することとはかなり違う方向に向かいます。
      C++とPythonを理解すること自体が主な目的とはっきりしているなら、そのために競技プログラミングをやる必要は正直なところないでしょう。この場合は参考書から始めて問題ないはずです。ついでに競プロもやる場合、言語学習とは別の科目として言語はC++に絞ることを勧めます。
      競技プログラミング自体が主な目的なら、正直なところ言語を一通り理解する必要はないでしょう。とりあえず競技に取り組んでみて苦しければ参考書に戻ればいいはずです。競技が主目的なら言語はC++に絞ってしまいましょう(局所的にPythonを使ってもいい場面もありますが、意図的に二刀流を目指すのは勧めません)。
      いずれにせよ、競技プログラミングは言語の学習の場としてはいまひとつで(人生初めてのプログラミングという段階では有用だと思いますが)、C++を使えるならC++を使うことを勧めます。

  • @khoitan4758
    @khoitan4758 Год назад +3

    I love your videos

  • @lansazm
    @lansazm Год назад +4

    業務でgolangを使ってるのですが、pyrhonかc++のどちらかを新しく勉強してでも使うのがおすすめですか?

    • @evimalab
      @evimalab  Год назад +1

      ご質問ありがとうございます!
      Goは競技ではあまり見かけないのでプログラミング経験者向けおすすめ言語に含めませんでしたが、少なくとも入門~初級の段階では問題なく使えそうです。
      試しにGoで始めてみて、本格的にやる気になったらC++を習得するという段取りをおすすめします。
      (なお、Pythonは、すでにGoを書ける方が競技のために習得するメリットは少なそうです。
      プログラミング未経験者が出だしでの挫折リスクを下げるのには良い選択肢ですが…。
      競技のために言語を習得するなら、C++以外の選択肢はほぼ考えなくて良いでしょう。)

    • @lansazm
      @lansazm 11 месяцев назад

      @@evimalab
      ご回答ありがとうございます。
      ずっと競プロには興味はあったのですが、書籍を読んでもc++で書かれていたり、ネット上でもc++がおすすめされたりしているので、c++一択だと思ってました。
      最近私生活で空いた時間をあまり作れず、競プロのためだけに慣れない言語に触れるのは少し腰が重かったんです。
      でも、えびまさんのおかげで、まずはgoで始めてみようと思えました。
      ありがとうございます!

  • @Wicxy
    @Wicxy 6 месяцев назад

    始めて一ヶ月ほどでA/Bは安定して解けるようになってきました。今、競技プログラミングの鉄則などの参考書を購入しようか迷っています。動画で紹介されていたアルゴリズムの参考資料でも十分ですかね?

  • @てるこ-h2n
    @てるこ-h2n Год назад +5

    現在pythonを使っているのですが、どのくらいのレーティングからC++有利になってきますか?

    • @evimalab
      @evimalab  Год назад +4

      クリティカルなご質問ありがとうございます!
      【短い答え】レーティングが4桁になる頃からC++の方が有利だと思いますが、
      移行のタイミングはもう少し早めをおすすめします(400~1000のどこか)。
      【長い答え】とんでもなく長くなりそうなので、独立したコメントとして書きます。

    • @てるこ-h2n
      @てるこ-h2n Год назад

      詳細な回答ありがとうございます!
      茶色まで来たのでC++への移行をしていきたいと思います@@evimalab

  • @アル-s9v
    @アル-s9v 5 месяцев назад +1

    julia言語ユーザー(歴1年未満)で、c言語は授業でかじった程度です。質問が2つあります。
    cとjuliaの速度の差ってどれくらいでしょうか?
    また、juliaに限界が来るのはどのレベルあたりなのでしょうか?

    • @aiueokakikukeko211
      @aiueokakikukeko211 2 месяца назад +1

      JuliaはAtCoder/競プロと相性良くないみたいな話はありますが青や水色にJuliaメインで行ってる人はちらほらいるみたいです

  • @ccuplover8861
    @ccuplover8861 11 месяцев назад +2

    業務でPHP、Jsを使っているのですが、それらは競プロNGですか?

    • @evimalab
      @evimalab  11 месяцев назад +3

      どちらもOKとNGの境界線上で、JavaScriptはOK寄り、PHPはNG寄りといったところだと思います。
      JavaScriptが使えるなら、とりあえずPHPは選択肢から外して良いでしょう。
      JavaScriptも競プロに最適とはいえませんが、入門~初級の段階では選択肢の一つには入ります。
      ただ、JavaScriptはC++と基本的な文法構造が似ているので、正直なところC++の習得が最もおすすめできる状況です。
      競プロのためだけに言語を覚えるのは…という場合は、試しにJavaScriptで始めてみて、本格的にやる気になってからC++を習得しても問題ないでしょう。

  • @romekana8294
    @romekana8294 5 месяцев назад +1

    好き

  • @TokuzaneMinami
    @TokuzaneMinami 11 месяцев назад +2

    使用している
    音楽を教えてください

    • @evimalab
      @evimalab  11 месяцев назад +1

      メイン:鞄と少年 musmus.main.jp/music_movie_03.html
      ラスト:星のコラージュ musmus.main.jp/music_movie_02.html
      です。

  • @A57278
    @A57278 6 месяцев назад +1

    I can manage to solve problems that require no knowledge but about the problems that require knowledge, should i learn and practice these knowledge or continue solving and when i meet a problem requires knowledge I should now study this knowledge?

    • @evimalab
      @evimalab  6 месяцев назад +1

      I think in most cases you can just continue solving problems and learn new knowledge when you really want to learn it, or it would be useless in the battlefield.

  • @cloverwindows6995
    @cloverwindows6995 Месяц назад

    これって定期的に更新してる?

    • @evimalab
      @evimalab  Месяц назад +1

      RUclipsの動画は一度公開すると基本的に中身を変えられません。この動画の内容は2023年10月に公開したときのままです。
      ただし、競技プログラミングは1年ですべてが変わるほど変化が激しい環境ではありません。
      (少なくとも2024年9月時点では、生成AIも決定的なゲームチェンジャーとはいえません。)
      ひとつだけ更新するとすれば、パソコンのメモリの推奨量でしょうか。
      これからパソコンを買うならできれば16GBを選ぶべきかもしれません。(主に Windows 10 のサポート終了のためです。)

  • @yash1152
    @yash1152 4 месяца назад

    0:26 0:28 0:39 0:42 well, i could make out some words..
    yesu, no, high-specc

  • @enkero-q2c
    @enkero-q2c Месяц назад

    VBAに慣れてしまった俺は終わり

  • @yash1152
    @yash1152 4 месяца назад

    1:50 video starts here

  • @rishabhraj8233
    @rishabhraj8233 7 месяцев назад

    thanks I code in cpp

    • @evimalab
      @evimalab  7 месяцев назад

      You're welcome!