AtCoder Beginner Contest 131感想戦

コンテストやったきりで復習しないマンなので,
blogに書くことによって強制的に復習するライフハック()を実践していく.

AtCoder Beginner Contest 131

atcoder.jp

A - Security

https://atcoder.jp/contests/abc131/tasks/abc131_a

解けた.

S = input()
ahead = S[0]
flag = False
for s in S[1:]:
    if s == ahead:
        flag = True
        break
    ahead = s
if flag:
    print("Bad")
else:
    print("Good")

B - Bite Eating

https://atcoder.jp/contests/abc131/tasks/abc131_b

解けた.
0に近い数値を引かなきゃいけないのに,単純にminで取ってしまってちょっと手間取った.

import numpy as np
N, L = map(int, input().split())
taste = [L+i for i in range(N)]
taste = np.array(taste)
print(sum(taste) - taste[np.argmin(np.abs(taste))])

C - Anti-Division

https://atcoder.jp/contests/abc131/tasks/abc131_c

解けた.
最初わかんねぇ!と思ったけど,紙に書いたらn個おきに割り切れるやつが来るので,
その数を引いて,重なってる部分を補正してやれば良いと気づけた.
でも正直もっと良い実装がありそう.

from fractions import gcd

def lcm(x, y):
    return (x * y) // gcd(x, y)

A, B, C, D = map(int, input().split())
if A%C == 0:
    wid = A
else:
    wid = (A//C + 1) * C
if wid > B:
    c_num = 0
else:
    c_num = (B-wid) // C + 1

if A%D == 0:
    wid = A
else:
    wid = (A//D + 1) * D
if wid > B:
    d_num = 0
else:
    d_num = (B-wid) // D + 1

E = lcm(C, D)
if A%E == 0:
    wid = A
else:
    wid = (A//E + 1) * E
if wid > B:
    e_num = 0
else:
    e_num = (B-wid) // E + 1

print(B - A - (c_num + d_num - e_num) + 1)

D - Megalomania

https://atcoder.jp/contests/abc131/tasks/abc131_d

やったぜ,解けた.
感覚的にCの方が難しかった気がする.
締め切り時刻と,締め切り時刻までのコストの和を比較すれば良いと気づけた.

N = int(input())
A = []
B = []
for i in range(N):
    a, b = map(int, input().split())
    A.append(a)
    B.append(b)
tmp = zip(B, A)
B, A = zip(*sorted(tmp))

total = 0
flag = False
for b, a in zip(B, A):
    total += a
    if total > b:
        flag = True
        break
if flag:
    print("No")
else:
    print("Yes")

E, F

わかんなかったorz
D問終わった時点で.40分位残ってたけど20分位椅子を温めて諦めた.
こういうの解けるようになりたいなぁ...