隙あらば自分語り

とある専門学生が機械学習を学んでいく軌跡を描いたブログ

ABC120

ABC120 感想

f:id:biyt1280350:20190303234141p:plain 3完
パフォーマンス:1204
rate:+42 とここ最近ではなかなかいいできだった

A - Favorite Sound

単純にBをAで割りCより多いかそうでないか判定する問題
コードはこちら

A,B,C = [int(i) for i in input().split()]
 
if B//A >= C:
    print(C)
else:
    print(B//A)

B - K-th Common Divisor

A,Bの約数のうち大きいほうからK番目を見つける問題
正直うまいやり方が全然見つからなかった

約数の探し方も何も工夫せずに1からmin(A,B)まで全部探してリストに追加するごり押し
TLEにならなかったので良しとしたがひどい...

A,B,K = [int(i) for i in input().split()]
 
count = 0
p = 1
l = []
while p<=A and p<=B:
    if A%p == 0 and B%p == 0:
        l.append(p)
    if count == K:
        break
    p+=1
 
print(l[-K])

C - Unification

問題文が複雑で一見もの凄い難しそうに見える
実際に自分で何個かテストケースで試してみると意外と単純なのに気付ける

というのも操作が終わった後残る数字は全部0or1の1種類に決まるからだ
2値でやってるので当たり前だが意外と盲点だった

なので実際のコードは非常にシンプル

S = list(input())
 
a = S.count('1')
b = S.count('0')
 
print(min(a,b)*2)

0or1数が少ないほうが全部消えるため、少ないほうに2倍かけた値が消えた個数になる

D - Decayed Bridges

問題がかなり複雑でもの凄い難しかく解けなかった

ただ他のABCのD問題に比べると手が付けやすいほうだったのかとは思う

N個町があり、道がすべてない場合の不便さは1~Nまですべて足し合わせた数値になる
そこから橋が架かっていくにつれ不便さがどれだけ解消していくかの方向で考えていくと解けそうな感じはした
実際には感じがしただけだった;;