![見出し画像](https://assets.st-note.com/production/uploads/images/92892118/rectangle_large_type_2_17c7724f3d0158c6b6f9fc64764476fd.png?width=1200)
やっと競プロに手を付けたお話(AMC2022 Day 9)
はじめに
・AMC2022の9日目の記事です.
・雑談系に見えますね?そうです雑談系です
・これは競プロにまっっっっっっったく手を付けていない人がatcoderのABCのA問題(できればBC…)を通したい!という気持ちで11/28~12/3の期間,お勉強したお話です. (それ需要あるのか)
・くそ長記事です.許して
・本当に初心者なんです、間違っていたらこっそり教えて下さい
最初にやったこと(11/28)
さて、まずは…
![](https://assets.st-note.com/img/1669629385581-Ohnuudwyuf.png?width=1200)
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の問題を見てみようかな~
というかコードテストってのがあるらしいですね.
今日(おととい)のプログラムの確認でもするかー
![](https://assets.st-note.com/img/1669798078707-bkXirjrOUU.png?width=1200)
![](https://assets.st-note.com/img/1669798100009-hvXMPnbwuW.png?width=1200)
できましたね。やったぜ。
これもうatcoderの問題通せちゃうんじゃないの~
~~~ ここでぼんくら君はあることに気が付く ~~
「入力ってどうするの?笑」
ということでチュートリアルにある welcome to atcoder の解答例を見てみます.
Python3ですかね?
![](https://assets.st-note.com/img/1669798710685-0a6nXU7KaD.png?width=1200)
は ?
は?は?は?は?は(落ち着け
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なんて凄いのもある(どこで使うん)。
![](https://assets.st-note.com/img/1669909717712-14RxDBf3zl.png?width=1200)
![](https://assets.st-note.com/img/1669909738198-uWAn27WOdJ.png?width=1200)
お勉強(12/2)
ねちゃった…(12/1の進捗がなさすぎる)
なんかforとifというのがあるので, 今日はfor文についてやろうと思います.
for文は簡単に言うと繰り返しの命令で, 結構重要です.
えっ、なんで知ってるかって?
グ グ り ま し t (((((((殴
━━━━━━━ というわけで再度ググる ━━━━━━━━━
for文は,
for x in range(10):
print(x)
という形で書けるらしいです.早速書いていきます~
![](https://assets.st-note.com/img/1669976363886-oa4c7PHFX3.png?width=1200)
![](https://assets.st-note.com/img/1669976405659-CGBXvFO5Td.png?width=1200)
え?…
あー range(5) の後の : (セミコロン)を忘れていますね. 私としたことがこんな簡単なミスをするなんt
![](https://assets.st-note.com/img/1669976743717-KSNONIyuuD.png?width=1200)
??????
┅┅┅ 5分ぐらい考える&調べる ┅┅┅┅
なんかprint(A)の前に2つ半角スペースをつける必要があるらしい… それぐらい許してよー
![](https://assets.st-note.com/img/1669977159751-I1cdL4g5S0.png?width=1200)
![](https://assets.st-note.com/img/1669977175721-HyaaAJFrWs.png?width=1200)
やったぁぁぁぁ
…というかfor文は意外といけたし, どうせならif文もやっちゃおうかな
if文をやっていく
if文は簡単に言うと条件分岐の命令です. 下のような感じで書くらしいです.
if 条件式 :
成立したときに実行するやつ
if 条件式 :
成立したときに実行するやつ
else :
そうでないときに実行するやつ
if 条件式A :
条件式Aが成立するときに実行するやつ
elif 条件式B :
条件式Aは成立しないけど, 条件式Bが成立するなら実行するやつ
else :
条件式AもBも成立しないときに実行するやつ
条件式にはなんか書き方があるらしく, 例えば A=0 と書くとエラーになっちゃうらしいです. (先程のPDFの画像を貼っておきます)
![](https://assets.st-note.com/img/1669988931030-E8qVMgxmuu.png?width=1200)
いいですか。: と書いてトラップと読みます. (いいえ)
これと空白だけはもう絶対に忘れないようにしまs…
![](https://assets.st-note.com/img/1669989061718-N3e8TW7IeN.png?width=1200)
![](https://assets.st-note.com/img/1669989071512-eG0M7xFUdQ.png?width=1200)
いい加減学んでくれ???????
━━━━ 15分ぐらい遊ぶ ━━━━━━
というかそろそろもしかしたらatcoderの問題が解けるかも…
そんなことは
あった。(?)
早速やっていきましょううううう
問題はAtcoderの問題から見ています.
ABC188-A Three-Point Shot
![](https://assets.st-note.com/img/1669991048494-DJtD5x5Sqt.png?width=1200)
とりあえず解き方はすぐ分かります. 差の絶対値が3未満ならOKです.
ここで, 絶対値はabsでできることを思い出します. なのでabs(X-Y)を計算してifして(動詞)あげれば解けます!
![](https://assets.st-note.com/img/1669991524800-iRm6qcp9RS.png?width=1200)
![](https://assets.st-note.com/img/1669991557305-Dq9bXmfXsr.png?width=1200)
AC!ひゃっほい!(?)
こんな感じでやっていきましょう! …とその前に
問題を漁っていて気付いたのですが, これ文字列の問題多くないですか?文字列についてもやっておきたいと思います.
len(K) で文字列Kの文字数を出してくれる!
K[n] で文字列Kのn+1文字目を出してくれる!
for c in K というfor文で, 文字列Kを1文字ずつ出してくれる!
多分これはいつか使う(と思われる)ので覚えておきます…
ABC086-A Product
![](https://assets.st-note.com/img/1669996739269-bZ7Ub8X1Uy.png?width=1200)
掛けてif!(くそ雑解説)
![](https://assets.st-note.com/img/1669996874126-s9GJaPhrHI.png?width=1200)
とりあえずここで終わっておきます… だいたいできるようになってきたかなー
お勉強(12/3)
今日はABCがあるらしいですね、頑張ります。
問題を漁っていて気付いたのですが(2回目), これ…
![](https://assets.st-note.com/img/1670051164736-kBcA6bEYKc.png?width=1200)
これどうすんねん。(関西弁)
━━━━━ ググる ━━━━━
こういうのは配列というらしく, こんな感じで入力ができるみたいです…
![](https://assets.st-note.com/img/1670051857050-9ylBPBZoOy.png?width=1200)
いつものやつに list を付けました.
…ちょっと覚えること多すぎません?ややこしいな…
大雑把にまとめると,
・1つの入力はinput!
2つ以上はmap(int, input().split()) !
・出力はprint!
・繰り返しはfor!
・条件分岐はif!
・配列(入力)はlist!
ふぅ… あとは問題を解きまくるだけですかね…
漁りますーー
ABC277-A ^{-1}
![](https://assets.st-note.com/img/1670054118627-Jsr6pIO31J.png?width=1200)
これはN,Kをいつもので入力して, 次に配列Pを入力してあげればいいですね.
forってifる!(動詞)
![](https://assets.st-note.com/img/1670054543767-esQ7KOzpFj.png?width=1200)
最後に解答するのが i+1 なことには注意しないといけませんね… テストコードを書いて気付きました.
ところで題名が独特ですね. (褒めている)
ABC279-B LOOKUP
![](https://assets.st-note.com/img/1670060991214-f5wOH8jJAs.png?width=1200)
さて, 200点問題を解いていきたいと思います. (まあこれdiff 37 なんですけどね!)解き方としては
Sの部分文字列を全部出す(for) → どれかがTと同じになる?(if)
が思い付きました.
ただ実装が難しいですね…
i < j となるi , j を全部取れば良くて, これは2重でforを使うとできます. なぜかどっかでこういうのを見たことがありました(?).
あとはif文で条件式を書いたら終わりです!
![](https://assets.st-note.com/img/1670062345735-mVlabW62yS.png?width=1200)
何気に4~6行目は頑張りました.
変数Cを作ったり(←??)色々変なことをしました.
ところでこれ想定解何なんでしょう…?
![](https://assets.st-note.com/img/1670062617776-qDhvfx75Dl.png?width=1200)
なるほど… 頭良い解法ですね…
python解もあるみたいですね.
![](https://assets.st-note.com/img/1670062727246-ZvyDSfYEIM.png?width=1200)
ん? えっそんなのあるの?(勉強不足)
ABC280参加記(12/3)
C1完(6970位)でした!
![](https://assets.st-note.com/img/1670077041944-ZRSD2tuBW1.png?width=1200)
は?
Aを解くことを目標にしていたのにCだけ解くって何ですか?
…まあでも300点をACできたのは嬉しいです. やったね.
Cについて
これは300点なんですか…?()
プログラムを書くのもそんなに苦じゃなかったです.
なんとなく初めて異なるところなのかなー(+ちょっとだけ例外)でACできました.
![](https://assets.st-note.com/img/1670077068470-SwUcY8FrZU.png?width=1200)
breakの無理やり感凄いですね…
A,Bについて
A,B どちらも方針は立ちました.
A…文字列の配列の仕方がわからない
B…空白を入れて出力する方法がわからない
です!
まあ勉強不足ですね…
せっかくなので (12/3 ~ 12/8)
解いた問題を載せていきますーー
(※ネタバレ注意)
ABC246-B Get Closer
![](https://assets.st-note.com/img/1670339307752-BgKmDZ8efy.png?width=1200)
ベクトル(A,B)を考えて 1/√(A^2+B^2) 倍すれば大丈夫ですね.
√は1/2乗でプログラムできますね
![](https://assets.st-note.com/img/1670493533920-UtisJmY9YP.png?width=1200)
5~7行目は調べながら頑張りました…
ABC144-C Walk on Multiplication Table
![](https://assets.st-note.com/img/1670493615672-CMqum5KOz6.png?width=1200)
Nの約数のうち, 最も√Nに近いものを選べば良さそう
(相加相乗平均の不等式とかから分かる)
√N以下を全部調べてあげればよくて, そのうち最大のものを選ぶと良いですね.
![](https://assets.st-note.com/img/1670497124371-H3A72TircI.png?width=1200)
なんか変数の置き方がヤバいですね…
灰後半diffを解けたのは嬉しいです.
おわりに
ここまで読んで頂きありがとうございました!
いや長い。色々詰め込もうと思っていたらこうなりました. 申し訳ないです.
競技プログラミングはパソコンカチカチのイメージが強くて, 今まで遠ざかっていたのですが, 意外と数学っぽい問題も多くて驚きました.
…さて, 今日はAMCの9日目ですね!(唐突)
まだまだ豪華な方々(語彙力)の記事が残っているので是非是非チェックしてみて下さい!それでは~
〈どうでも良い話〉
OMCの参加を最近しておらず, 最近参加記が書けていません… 近々復帰していきたいです…
あと,この記事はぴったり5000文字です(?)