はじめに
はじめまして
現在は京都に住んでいる大学院生です。atcoderに関する投稿を行っていきたいなと思っています.
つい先月まで就活をしていました.多浪ということで、ただでさえハードな就活がコロナによってさらにベリーハードになるのではと不安になりました.しかし、特につまずくことなく無事終えることができました.
内定くださった企業さんありがとうございます.
atcoderの現在のレートは下図のような感じです.多浪らしく残念なくらいのんびりした成長スピードですが、頑張っていきます
自習をしリハビリしてからABCに参加しようか悩みましたが、実践あるのみということでとりあえず記念すべきABC200に参加させて頂きました.
ABC200[https://atcoder.jp/contests/abc200]
#全体の感想
A、B、C問題は15分程で解答できました.しかし、D問題はさっぱり分からず1時間考えた後、諦めてお風呂に入りました。
順位を途中見た感じ、他の人もD問題で苦戦してるように見えました。
各問題の感想
A問題
100で割って,割り切れるかどうかで1を足すか判別させました。
n=int(input())
if n%100==0 :
print(n//100)
else :
print(n//100+1)
B問題
操作通りに実装しただけです.200の倍数であれば、200で割り、そうでなければ1000倍した後に200を加えました。
n,k=map(int,input().split())
for i in range(k) :
if n%200==0 :
n=n//200
else :
n=n*1000+200
print(n)
C問題
200という数字がやたら出てくるのは200回目だからかな、と思いつつC問題を解きました。
「差をとった際に200で割り切れる組み合わせの個数は」という問題でした.差をとって200で割り切れるということは、言い換えれば「200で割った際、余りが同じ数字の中から2組を選んだ場合の数」かなと考えました。
そこで、countというリストを作り、余りがiとなる数字が数列にあればcountのインデックスiに1を加えて個数を数えました。
最後にcountリスト内に2以上の数字nが出てくれば、nC2で計算しました。
n=int(input())
a=list(map(int,input().split()))
count=[0]*200
ans=0
for i in a :
count[i%200]+=1
for i in count :
if i==0 or i==1 :
continue
else :
ans+=i*(i-1)/2
print(int(ans))
D問題
これに関しては解いている最中はさっぱり分かりませんでした.数列B、Cはなんか個数も異なる場合があるみたいだし何でもありなのか?と思い、どうすればいいか全くでした.
解説を読むとどうやら鳩ノ巣原理を使うようです.競プロというよりもはや数学だ、、、
8種類の余りが存在すれば、2**8=256で一応256種類の数字が出てくることから、少なくとも余りは0から199まで存在し、256-200=56で56個はどこかの余りと被るようです.
はじめは256種類の数字について、そもそもすべて異なる余り(0から199の余りが出現)になる保証はあるのか?とか、その場合8種類の選び方にも何かしら条件があるのでは?とか、余計な事を考えました。
ここの範囲については高校数学Aの整数分野について学習しなおした方が良さそう、、、
n=int(input())
a=list(map(int,input().split()))
m=min(n,8)
count=[0 for _ in range(200)]
for i in range(1,2**m) :
cnt=0
#----enumerateはインデックスと要素を出力----#
for j,k in enumerate(a) :
if i>>j&1 :
cnt+=k
cnt%=200
if count[cnt]==0 :
count[cnt]=i
#----同じ余りが二つある場合----#
else :
#----先にi番目について----#
print("Yes")
blst=[]
clst=[]
for l in range(m) :
if i>>l&1 :
blst.append(l+1)
i=count[cnt]
#----次にcount[cnt]に書かれている順番について----#
for o in range(m) :
if i>>o&1 :
clst.append(o+1)
print(len(blst),*blst)
print(len(clst),*clst)
exit()
print("No")
E、F問題
まだ僕には解くのは早いようです.精進してからまたいつの日か解きます.
修論書く前には解けるようになりたいなあ(願望)
最後に
久しぶりのABCでしたが、思いのほか解けました.レートも上がって万々歳です.9月以降は修論が本格的に始まり、そちらのコードを書かないといけないので、恐らくABCに参加できる頻度は下がるかなあと.
7月中にはぜひ緑まで行きたいですね.