AtCoder Beginner Contest 131感想戦
コンテストやったきりで復習しないマンなので,
blogに書くことによって強制的に復習するライフハック()を実践していく.
AtCoder Beginner Contest 131
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分位椅子を温めて諦めた.
こういうの解けるようになりたいなぁ...