見出し画像

やっと競プロに手を付けたお話(AMC2022 Day 9)

はじめに

AMC2022の9日目の記事です.

・雑談系に見えますね?そうです雑談系です
・これは競プロにまっっっっっっったく手を付けていない人がatcoderのABCのA問題(できればBC…)を通したい!という気持ちで11/28~12/3の期間,お勉強したお話です. (それ需要あるのか)

・くそ長記事です.許して

・本当に初心者なんです、間違っていたらこっそり教えて下さい


最初にやったこと(11/28)

 さて、まずは…

atcoderに登録してみました!
登録は思ったより簡単にできるみたいです

あ、ちなみに競プロはあまりガチる予定がない(できない)ので今回は自分のスマホを使っています。(やってみよう!ぐらいの程度ということです)

最初に決めたこと(11/28)

言語何にしましょう…?
なにがいいんだろう…

┅┅┅┅┅┅┅┅┅┅┅ ぐぐる ┅┅┅┅┅┅┅┅┅┅┅

競プロでよく使われる言語は2種類あるらしく、
C++pythonがあるらしい(他にもJavaとか?…)

C++・・・ちょっと難しいらしい!凄いらしい!
python・・・習得が簡単らしい!パイソンと読むらしい!(はい)

そこに言語が2つあるじゃろう…
さあ、選べ!

出典 : ポケモン

今回は期間も短いことだし、pythonを勉強しようと思います~
C++も気が向いたらします…

とりあえずかる~くお勉強(11/28)

pythonの勉強には、京都大学の方が無料で出している 
「プログラミング演習 python 2021」
というPDFを参考にさせて頂きました!ありがとうございます!

これを軽く読んで見たところ、変数というものがあるらしい…
なにそれ   

どうやら名前の付いた箱(?)のようです… 例えば A=1 と書くと
変数 A に1が入るらしい. なんか凄い. 

また、print(A) と書くと A に入った数字が表示されるらしい…

今日のプログラム(は?)

1 | A=602
2 | B=66
3 | A=(A+B)/2
4 | print(A)

これで334になるはず… とりあえず今日はここで止めておきます



お勉強(11/30)

はい。一日サボりました。(だからダメなんだよ)
今日は一通りatcoderの問題を見てみようかな~

というかコードテストってのがあるらしいですね. 
今日(おととい)のプログラムの確認でもするかー


☆ 3 3 4 ☆

できましたね。やったぜ。
これもうatcoderの問題通せちゃうんじゃないの~

~~~ ここでぼんくら君はあることに気が付く ~~


「入力ってどうするの?笑」


ということでチュートリアルにある welcome to atcoder の解答例を見てみます. 
Python3ですかね?

                


は?は?は?は?は(落ち着け

a=int(input()) の部分は
input()→入力! int→整数! だからまだ分かる. 

だが b, c = map(int, input().split()) とはなんだ。分からない。

…どうやら入力方式が
a
b c
みたいな感じなのでこうなってるみたいです.
こうしたらなんで b,c どっちにも入るんだ?と思ってググったのですが… 分かりません. 配列がなんやかんやらしいです. 
こればかりは覚えるしかないのかも…

そしてラストの出力のprint("{} {}".format(a+b+c, s)) 。
これは{}に, formatの( )の中のやつを入れろ!という意味らしいです.(こっちはググると分かった)
例えば
1 | a=0
2 | print("今日のテストは {} 点です!" .format(a))
と打つと「今日のテストは0点です!」と出力されるらしい…
解答例のはその2つバージョンということらしい… 難しい

でもこれできたらもうほぼなんでもできるのでは?!

━━━━ そんなことはなかった(知ってた) ━━━━━

今日のプログラム

1 | N=int(input())
2 | X=int((1000**N-1)/999)
3 | print(334*X)

334をN回繰り返す(世界一需要のない)プログラムを作りました!
最後の .0 が消えなくて困っていたのですが, intで囲んだら取れました. 成長を感じる。(?)
というかこれNが7以上になるとおかしくなるので本当に需要がないです.もっといいのあるだろ
(12/2追記 : あります. こんなくそコードは作らないようにしましょう. )

お勉強(12/1)

さてさて,今日は何をしましょう.(←先に決めてくれ)
そういえばatcoderの問題をざっと見た感じ,余りの問題が多いイメージだったので,見ていこうかな~

━━━━━ グ グ る ━━━━━━━

余り : //で商、%で余りを求めることができるらしい。divmodなんて凄いのもある(どこで使うん)

3 3 4

お勉強(12/2)

ねちゃった…(12/1の進捗がなさすぎる)

なんかforとifというのがあるので, 今日はfor文についてやろうと思います.
for文は簡単に言うと繰り返しの命令で, 結構重要です. 

えっ、なんで知ってるかって?
 グ  グ  り  ま  し  t (((((((殴

━━━━━━━ というわけで再度ググる ━━━━━━━━━

for文は, 

for x in range(10):
  print(x)

という形で書けるらしいです.早速書いていきます~

意外と簡単じゃーん(フラグ)
WA(敗北)

え?…

あー range(5) の後の : (セミコロン)を忘れていますね. 私としたことがこんな簡単なミスをするなんt

2ペナ

??????

┅┅┅ 5分ぐらい考える&調べる ┅┅┅┅

なんかprint(A)の前に2つ半角スペースをつける必要があるらしい… それぐらい許してよー

CA!

やったぁぁぁぁ

…というかfor文は意外といけたし, どうせならif文もやっちゃおうかな

if文をやっていく

if文は簡単に言うと条件分岐の命令です. 下のような感じで書くらしいです. 

if 条件式 :
  成立したときに実行するやつ

とりあえず成立すればOK!タイプ

if 条件式 : 
  成立したときに実行するやつ
else
  そうでないときに実行するやつ

ちゃんと不成立のときまで定義してくれよータイプ

if 条件式A : 
  条件式Aが成立するときに実行するやつ
elif 条件式B : 
  条件式Aは成立しないけど, 条件式Bが成立するなら実行するやつ
else
  条件式AもBも成立しないときに実行するやつ

条件の積み重ね、ズバリハンバーガータイプ(???)

条件式にはなんか書き方があるらしく, 例えば A=0 と書くとエラーになっちゃうらしいです. (先程のPDFの画像を貼っておきます)

いいですか。: と書いてトラップと読みます. (いいえ)
これと空白だけはもう絶対に忘れないようにしまs…

WA(敗北)

いい加減学んでくれ???????


━━━━ 15分ぐらい遊ぶ ━━━━━━



というかそろそろもしかしたらatcoderの問題が解けるかも…


そんなことは


あった。(?)

早速やっていきましょううううう

問題はAtcoderの問題から見ています. 

ABC188-A  Three-Point Shot

とりあえず解き方はすぐ分かります. 差の絶対値が3未満ならOKです. 
ここで, 絶対値はabsでできることを思い出します. なのでabs(X-Y)を計算してifして(動詞)あげれば解けます!

プログラムができた

AC!ひゃっほい!(?)
こんな感じでやっていきましょう! …とその前に

問題を漁っていて気付いたのですが, これ文字列の問題多くないですか?文字列についてもやっておきたいと思います. 

len(K) で文字列Kの文字数を出してくれる!

K[n] で文字列Kのn+1文字目を出してくれる!

for c in K というfor文で, 文字列Kを1文字ずつ出してくれる!

多分これはいつか使う(と思われる)ので覚えておきます…

ABC086-A  Product

掛けてif!(くそ雑解説)

とりあえずここで終わっておきます… だいたいできるようになってきたかなー

お勉強(12/3)

今日はABCがあるらしいですね、頑張ります。

問題を漁っていて気付いたのですが(2回目), これ…

        これどうすんねん。(関西弁)

━━━━━ ググる ━━━━━

こういうのは配列というらしく, こんな感じで入力ができるみたいです…

いつものやつに list を付けました. 

…ちょっと覚えること多すぎません?ややこしいな…

大雑把にまとめると,

・1つの入力はinput
 2つ以上はmap(int, input().split())
・出力はprint
・繰り返しはfor
・条件分岐はif
・配列(入力)はlist

あと : は絶対に忘れない

ふぅ… あとは問題を解きまくるだけですかね…
漁りますーー

ABC277-A  ^{-1}

これはN,Kをいつもので入力して, 次に配列Pを入力してあげればいいですね. 
forってifる!(動詞)

最後に解答するのが i+1 なことには注意しないといけませんね… テストコードを書いて気付きました. 
ところで題名が独特ですね. (褒めている)

ABC279-B  LOOKUP

さて, 200点問題を解いていきたいと思います. 
(まあこれdiff 37 なんですけどね!)
解き方としては

Sの部分文字列を全部出す(for) → どれかがTと同じになる?(if)

が思い付きました. 
ただ実装が難しいですね…
i < j となるi , j を全部取れば良くて, これは2重でforを使うとできます. なぜかどっかでこういうのを見たことがありました(?). 
あとはif文で条件式を書いたら終わりです!

何気に4~6行目は頑張りました.
変数Cを作ったり(←??)色々変なことをしました. 

ところでこれ想定解何なんでしょう…?

なるほど… 頭良い解法ですね…
python解もあるみたいですね.

ん? えっそんなのあるの?(勉強不足)

ABC280参加記(12/3)

C1完(6970位)でした!


は?

Aを解くことを目標にしていたのにCだけ解くって何ですか?

…まあでも300点をACできたのは嬉しいです. やったね. 

Cについて

これは300点なんですか…?()
プログラムを書くのもそんなに苦じゃなかったです. 
なんとなく初めて異なるところなのかなー(+ちょっとだけ例外)でACできました. 

9,10行目が例外処理です

breakの無理やり感凄いですね…

A,Bについて

A,B どちらも方針は立ちました.
A…文字列の配列の仕方がわからない
B…空白を入れて出力する方法がわからない
です!

まあ勉強不足ですね… 

せっかくなので (12/3 ~ 12/8)

解いた問題を載せていきますーー


(※ネタバレ注意)



ABC246-B  Get Closer

ベクトル(A,B)を考えて 1/√(A^2+B^2) 倍すれば大丈夫ですね. 
√は1/2乗でプログラムできますね

5~7行目は調べながら頑張りました…

ABC144-C  Walk on Multiplication Table

Nの約数のうち, 最も√Nに近いものを選べば良さそう
(相加相乗平均の不等式とかから分かる)
√N以下を全部調べてあげればよくて, そのうち最大のものを選ぶと良いですね. 

なんか変数の置き方がヤバいですね…
灰後半diffを解けたのは嬉しいです.


おわりに

ここまで読んで頂きありがとうございました!

いや長い。色々詰め込もうと思っていたらこうなりました. 申し訳ないです. 

競技プログラミングはパソコンカチカチのイメージが強くて, 今まで遠ざかっていたのですが, 意外と数学っぽい問題も多くて驚きました. 

…さて, 今日はAMCの9日目ですね!(唐突) 
まだまだ豪華な方々(語彙力)の記事が残っているので是非是非チェックしてみて下さい!それでは~

〈どうでも良い話〉
OMCの参加を最近しておらず, 最近参加記が書けていません… 近々復帰していきたいです…
あと,この記事はぴったり5000文字です(?)

この記事が気に入ったらサポートをしてみませんか?