茶色になるまでにつまずいたこと

こんにちは。あずびわです。

この記事は競プロアドカレ2023の10日目の記事として書いています。

adventar.org

 

AtCoderを始めてから入茶するまで、つまずいたこととその答えを自分なりに簡単にまとめてみました!

AtCoder始めたばかりで困っている方や、初心者に教える方の参考になればと思います!

 

目次

 

はじめに

いろんな入茶記事読んで、AtCoder Problems使って過去問解きつつ鉄則本読めば良い...?となった後の疑問集です。

私自身は、AtCoder始めた時点でプログラミング未経験でしたが、数日間のプログラミングワークショップには参加したことがあったので、if文やfor文については理解していました。

算数・数学については、算数は算数オリンピックもやっていたのでそこそこ、高校数学は一応文系範囲は履修済みなもののあまり自信がないくらいでした。

 

A問題も難しすぎる

AtCoder Problemsのdiff (難易度)を見ましょう。

円の数字の部分が小さい問題から解くと良いです。

 

入出力とは

競プロでは、変数などを入力として受け取り、答えを出力します。

この記事や派生したC++以外の言語の記事を参考にすると分かりやすいです。

qiita.com

例えば、PythonC++では以下のような部分です。

Pythonでは、1行で複数の値を入力するときはinput().split()になるなど、注意が必要です。

Python

   a = input() # aに入力
   print(a) # aを出力

C++

    int a; // 数値型のaを定義
    cin >> a; // aに入力
    cout << a << endl; // aを出力

 

continueとbreakの違い

for文やwhile文などのループで用いられるcontinueとbreakの違いは何なのか。

continueはそのループの間 (for(int i=0; i<n; i++)のiが同じ数字である間)、continueの後の操作をスルーしますが、breakではループ自体をやめます。

    for (int i=0; i<5; i++) {
      if (i%2 == 0) continue; // iが2の倍数の場合continue
      cout << i << endl;
    }
    1
    3

iが偶数の場合はループ内の以降の文、つまりcout<<i<<endl;が行われないため、何も出力されません。

iが奇数である、1と3が出力されます。

    for (int i=0; i<5; i++) {
      if (i%2 == 0) break;
      cout << i << endl;
    }
 

iが0から始まり、0%2==0はtrueのため、ループの最初にbreakしてループを抜けます。

そのため、何も出力されません。

 

グラフとは

Q. グラフとは?

グラフは、簡単に言うと点とそれを結ぶ辺の集まりです。

よく例に挙げられるのは路線図や人物相関図などで、AtCoderでは道路の最短経路を求める問題などで用いられていて、頻出です。

Q. グラフをプログラム上でどう扱うのか?

例として、このグラフが与えられる場合を考えてみます。

入力として、1行目に点と辺の個数、2行目以降にそれぞれの辺が結ぶ頂点が与えられます。

    5 5 // 点が5つ、辺が5つ
    1 2 // 点1と点2を結ぶ辺
    2 5
    1 3
    1 4
    5 4

これを配列の形で利用します。

具体的には、それぞれの点がどの点と結ばれているのかの配列、そしてそれをまとめる配列の2次元配列になります。

    graph[0] = {2, 3, 4} // 配列は0から数えるので、点1の結ばれている点
    graph[1] = {1, 5}
    graph[2] = {1}
    graph[3] = {1, 5}
    graph[4] = {2, 4}

 

おわりに

ゆるくアルゴリズムを勉強しながらのんびりAtCoderの過去問を解いていれば、競プロに慣れます!

AtCoder入茶しました!

初めまして。あずびわです。

アルファベットの最初と最後と最初から2番目と最後から2番目のAZBYであずびわです。

AtCoder入茶嬉しいポエムです。

※入茶後、記念に取っておいたビールを飲みながら書いています。

 

目次

自己紹介

立命館アジア太平洋大学国際経営学部3年です。とはいえ早期卒業なので今年度で卒業です。が、高校で不登校して高校4年をN高で過ごしているので標準的な年齢に戻ってます。

立命館と名前がついているのですが、大分県別府市の山の上の大学です。もちろん周囲にAtCoderをやっている人はいません。
とあるパブサでAtCoderにたどり着きました。

 

情報系の院進学を目指しています。

プログラミング力よわよわです。

 

プログラミング歴はこんな感じです。
中学生: パソコン部で幽霊部員。数日間のプログラミング体験に参加。if文やfor文などの知識を得る。
高校生: AtCoderのアカウントを作る。何から手をつけていいか分からず放置。
大学生: 1年の時にプログラミング入門を受講。Processingの使い方を学ぶ。その後しばらくしてAPG4bを読みながらAtCoderを本格的に始める。

中高でパソコン部に所属はしていたのですが、どちらも幽霊部員でやることが分からず、稀に行った際はタイピングを極めていました。

ABC初参加の際はProcessingの知識をもとにJavaで参加してました。
WAだったのですが、今でも正しい書き方が分からないので放置しています。

現在も大学でプログラミングを受講しているのですが、Pythonが2つとVBAで、Pythonはどちらのクラスも統計に使うためのPythonのような内容のため、最初の文法以外はあまり競プロに役立ちません。VBAは競プロで使えそうな内容ではあるのですが、コンテストでVisual Basic使う予定はないです...。

AtCoderではC++を中心に、たまにPythonを使っています。
Pythonは4月に上記の授業で始めたのですが、C++の知識がある程度あるおかげで身につくのが早い気がします。

 

その他

ジュニア算数オリンピックで本選に行ったことがあります。ただ、算数オリンピックでは行けなかったので、同年代の中では比較的算数が得意ではあるものの、競プロerの中で考えるとそこまでだと思います。

ちなみに、数学オリンピック・広中杯などは親の許可が降りず参加できなかったのですが、当時のことがトラウマで中高の間は数学の問題を解こうとするだけで泣くようになってしまい、数学は全くできないです。

 

入茶時のアルゴリズム知識

入茶する際に使ったアルゴリズムはDPとDFSとBFSだけな気がします。BFSは今までコンテスト中の1度しか書いたことがないです。全探索もきっと使っているとは思うのですが、どこからどこまでが全探索なのかよく分かっていません。

累積和は使うタイミングがまだよく分かっていません。

DFSはこの記事を読みました。

qiita.com

その他のアルゴリズムは鉄則本を読んでいます。
今93ページ(3章途中)くらいまで読み進めているみたいです。

 

入茶した感想

典型知識大事!!!

灰色で停滞していた時は、アルゴリズムの勉強をしないとなぁ〜と思って放置していたのですが、解説ACをする中でたまたまワーシャルフロイド法のコードを見たら簡単で、アルゴリズムの勉強をちゃんと始めました。
基本的なアルゴリズムはどれも考え方はシンプルなので、変に壁を感じずどんどん勉強するべきだなぁとなっています(また放置気味です)。

CodeQUEENの予選に向けてたくさん精進していたので、その影響も大きかったです。

ただ、最近パフォも良かったので、意外と入茶の感動がないです。
早く入緑したい。

 

やったこと

精進グラフに崖を作る

bfと戯れる

草をはやす

岩の上に土をのせる

Aを埋める

解いた

その他

レート200の頃にPaizaでAランクになりました。

アルゴ式ちょこちょこやってました。

 

入れた拡張機能

  • AtCoderLanguageButtons
  • AtCoder Easy Test v2
  • AtCoderUserSearchForm
  • AtCoderDevotionGraph
  • atcoder_all_open
  • AtCoder Submission User Colorizer
  • AtCoder Jump to Submissions from Standings
  • AtCoder Contest Standings with Twitter ID
  • ac-predictor

 

最後に

色変したのでおすすめ百合作品です。

twiman.net

2C=がろあ先生の作品はどれも好きです。