# APG4b進め方ガイド APG4bのリンク:https://atcoder.jp/contests/APG4b (AtCoderのアカウントがない人は作成してください。アカウント名は今のところ1回までしか変更できないので気をつけてください) ## APG4bとは ![スクリーンショット 2024-04-11 20.03.20](https://hackmd.io/_uploads/HJwKQHre0.png) (https://atcoder.jp/contests/APG4b より引用) ## APG4bの進め方 基本的に各項目を順番に進めてください。環境構築などは不要です。AtCoderのコードテストを使ってください。 APG4bの進め方で大事な点は2点です。 * **暗記しない。どんどん進む。** * **練習問題を毎回ACする** ### 暗記しない。どんどん進む。 プログラミングは暗記ではありません。競技プログラミング は基本的にコンテスト中にネットで検索することがOKで、開発でもたくさんWebサイトを開いて調べながら行うことがほとんどです。そのため、**暗記せず、必要になったら戻って見に来れば十分です**。繰り返し使っていると勝手に体が覚えます。 プログラミングができるようになるには、覚えるよりもたくさん使うほうがはるかに効果的なのでどんどん進んで、問題をたくさん解きましょう。 ちなみに競技プログラミング以外の他のプログラミングの学習においても覚えるよりも使うほうが効率的に習得できると思います。 ###  練習問題を毎回ACする。 どんどん進むと言いましたが、各項ごとの練習問題は毎回ACして次に進むようにしましょう。使うことで理解が進むと思います。むしろ練習問題を解くために各項の説明を見るというスタイルでも良いくらいです。 #### 補足 ##### 環境構築がしたい 環境構築とは、コードテストではなく、自分の手元の環境(Visual Studio Codeとか)でプログラムが実行できる環境を整えることです。 競技プログラミングで用いるC++の環境構築は以下がおすすめです。 * Windowsの人 https://www.youtube.com/watch?v=uhnASau7fB4 Yutubeの動画の通りにやるだけなので簡単です * Macの人 https://qiita.com/EvtHorizonCoder/items/145724e16c1b57ab64eb これの Visual Studio Code: 拡張機能と設定の章までやるのがおすすめかなと思います。 **全然わからないとか、なんか上手く動かない場合は気軽に、 Discordの質問のところで 「環境構築で詰まってます、Windowsです」 などチャットしてください。** 困ったときに聞けるというのがサークルのいいところだと思っています。 ##### プログラムを実行するとエラーが出た 大切なのはエラーを読むことです。良くわからなかったらエラーをGoogleの検索欄にコピペして見ましょう。解決策が見つかったりします。 またコードテストを使うとエラーコード139とか数字だけ表示されるときがあります。その際は下の記事が参考になるかもしれません。 https://shmug.hatenablog.com/entry/2020/12/15/235915 ##### どうしてもエラーの原因が分からないor練習問題が分からない エラーが解決できないまたは練習問題が分からないときは最低10分は考えたり調べたりしましょう。ただあまり長くそこに時間を使ってももったいない(特にエラーはスペルミスとかの場合も多いので)ので2,30分程度進展がなければ解説を見ましょう。エラーについてはソースコードをDiscordの質問などに貼ってもらえるとすぐに解決すると思います。 その他でもやっていて分からないことがあったりしたら是非Discordの質問チャンネルを利用してください! ## 各章の補足 (今後追加していきます) * 1.00.はじめに コードテスト、提出の言語のバージョンについてC++ (GCC 9.2.1)が推奨されていますが、コンテストなどで利用する際はC\++20 (gcc 12.2)やC\++17 (gcc 12.2)あたりがおすすめです。gcc とclangというものがありますが、clangだと#include <bits/stdc++.h>がコンパイルできないので**gcc**と書いてあるものを使ってください。 * 1.02.プログラムの書き方とエラー インデントの幅はPythonだと半角スペース4つが推奨されている。私はC++は半角スペース2つ分でやってます。 コンパイルエラー集は少し目を通しておくと良いかもしれません。 * 1.04.変数と型 int型とdouble型の計算は結果がdouble型になることは意識しておきましょう。 * 1.06.if文・比較演算子・論理演算子 && の代わりに and , || の代わりに or , ! の代わりに not を使うことができます。(その場合,変数との間にスペースを入れるか、変数をカッコで囲う必要があります) * 1.12.文字列と文字 c++はstring型の変数a,bを a+bと連結したいときに a = a + b;と書くか a += b;と書くかで計算量が変わります。 a += b;のほうが計算量が少ないので使えるならa += b;を使いましょう。 (新しく長さ|a+b|のstringオブジェクトを生成するか、aの後ろにbを追加するだけかという違い) * 1.13.配列 配列の要素のアクセスに.at()が推奨されていますがほとんどの人が[ ]を使っています。 ## APG4bをやり終えた人へ [Atcoder Beginners Selection](https://atcoder.jp/contests/abs)をやることで競技プログラミングの基礎的な考え方を学びましょう。プログラミングの勉強だけしたいよという人もAtcoder Beginners Selectionまではやることをおすすめします。実際に使うことで身につくことが多いので。 こちらのリンクに沿って進めていってください https://qiita.com/drken/items/fd4e5e3630d0f5859067 また、Pythonの簡単な実装(APG4bなどの知識だけでできる実装)はこちらから見てください。 https://github.com/triC-tmu/ABS_tutorial 毎週土曜9時からのABC(AtCoder Beginners Contest)にも参加したり、他にも問題をいろいろ解いてみましょう。