ABC187に参加した。
AtCoder Beginner Contest 187 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A – Large Digits
やるだけ。
a, b = input().split()
a = sum(map(int, list(a)))
b = sum(map(int, list(b)))
ans = max(a, b)
print(ans)
B – Gentle Pairs
傾きの定義通りに計算するだけ。
ゼロ除算になる可能性があったので、今思えばWAを踏む可能性がある危ないコードだった。
n = int(input())
xy = [list(map(int, input().split())) for _ in range(n)]
ans = 0
for i in range(n):
for j in range(i + 1, n):
x1, y1 = xy[i]
x2, y2 = xy[j]
grad = (y2 - y1) / (x2 - x1)
if -1 <= grad <= 1:
ans += 1
print(ans)
C – 1-SAT
重複を排除してくれるsetを使い、!ありと!なしの2グループ作り、共通要素があるかどうかを判定する。
n = int(input())
a = set()
b = set()
for _ in range(n):
s = input()
if s[0] == '!':
a.add(s[1:])
else:
b.add(s)
ans = a & b
print('satisfiable') if ans == set() else print(list(ans)[0])
D – Choose Me
a+bが大きい順にソートし、a+bが同値を取る場合はaの大きい順に並び替える。
最初はこの方針で以下のコードを提出したが、WAが少しのこりAC出来なかった。
n = int(input())
x = []
aoki = 0
takahashi = 0
for _ in range(n):
a, b = map(int, input().split())
x.append([a, b, a + b])
aoki += a
x.sort(key=lambda x: (x[2], x[0]), reverse=True)
ans = 0
for a, b, total in x:
if aoki < takahashi:
break
aoki -= a
takahashi += total
ans += 1
print(ans)
演説により敵陣営とa+a+bの差ができるため、a+a+bをkeyとしてsortし、値の大きい箇所から演説して回ればOK。
n = int(input())
x = []
aoki = 0
takahashi = 0
for _ in range(n):
a, b = map(int, input().split())
x.append([a, b, a + a + b])
aoki += a
x.sort(key=lambda x: (x[2]), reverse=True)
ans = 0
for a, b, _ in x:
if aoki < takahashi:
break
aoki -= a
takahashi += a + b
ans += 1
print(ans)
緑が遠い……。
コメント