🌟
AtCoder ABC207 個人的メモ
所感
abc3完
A - Repression
A,B,Cの内の一番小さい数字以外を足せばおk
A = list(map(int, input().split()))
print(sum(sorted(A)[1:]))
B - Hydrate
問題文を全然理解できなかったので、テキトーにシミュレーションしたら通っちゃった。
必要な操作回数を
これを変形すると
A, B, C, D = map(int, input().split())
cal = C * D - B
if cal <= 0:
print(-1)
else:
print(-(- A // cal))
コンテスト中に出したコード
blue = A
red = 0
for i in range(10 ** 6):
blue += B
red += C
if blue <= red * D:
break
else:
print(-1)
exit()
print(i + 1)
C - Many Segments
与えられる区間は整数で表されているが、表現しているのは実数からなる区間。
なので、
from itertools import combinations
N = int(input())
lst = []
for _ in range(N):
t, l, r = map(int, input().split())
if t == 1:
lst.append((l, r))
if t == 2:
lst.append((l, r - 0.1))
if t == 3:
lst.append((l + 0.1, r))
if t == 4:
lst.append((l + 0.1, r - 0.1))
ans = 0
for left, right in combinations(lst, 2):
a, b, c, d = left + right
if max(a, c) <= min(b, d):
ans += 1
print(ans)
D - Congruence Points
from itertools import permutations
def cal_dist(a: list, b: list):
"""2点a,b間の距離を計算"""
return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2
def cal_2d_vec_prod(a: list, b: list, c: list):
"""点aから点bへのベクトルと点aから点cへのベクトルの外積"""
return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0])
def cal_3pnts(a: int, b: int, S_or_C: set):
"""
事前に選んだ点a、点bとそれ以外の点それぞれに対して選んだ2点それぞれからの距離と外積を計算
"""
# S0=Ta,S1=Tb,Sa=Tcとする
return {(cal_dist(S_or_C[a], S_or_C[c]),
cal_dist(S_or_C[b], S_or_C[c]),
cal_2d_vec_prod(S_or_C[a], S_or_C[b], S_or_C[c])
) for c in range(N)}
N = int(input())
S = [list(map(int, input().split())) for _ in range(N)]
T = [list(map(int, input().split())) for _ in range(N)]
ans = False
if N == 1:
ans = True
elif N == 2:
ans = cal_dist(S[0], S[1]) == cal_dist(T[0], T[1])
else:
# Sから適当な2点を選び、それ以外の点それぞれに対して選んだ2点それぞれからの距離と外積を計算
lut_S = cal_3pnts(0, 1, S)
# Tから2点を選んだ時、その2点とそれら以外の点との距離と外積が事前計算と一致するか?
ans = any(lut_S == cal_3pnts(a, b, T)
for a, b in permutations(range(N), 2))
if ans:
print("Yes")
else:
print("No")
Discussion