最近は codeforces にも頑張って出ているが,こちらも出るたびにratingが下がっていく…
しかし,codeforces 出ると AtCoder は使いやすいなぁと思う.
Cまで開けたが,わからんかった.
A. Choose Two Numbers
普通に総当たり
n = int(input()) a = list(map(int, input().split())) m = int(input()) b = list(map(int, input().split())) def solve(): for i in range(n): for j in range(m): if (a[i] + b[j] not in a) and (a[i] + b[j] not in b): print(a[i], b[j]) return solve()
https://codeforces.com/contest/1206/submission/59005861
B. Make Product Equal One
1 か -1 の近いほうにして, -1 にするのが奇数個だったら, -1 => 1 or 1 => -1 のコストが小さいほうを変更する. 解説では 0を基準にしていた. もっとすっきり書けた気がする.
n = int(input()) a = list(map(int, input().split())) neg = [] pos = [] for aa in a: if abs(1 - aa) < abs(-1 - aa): pos.append(aa) else: neg.append(aa) ans = 0 if len(neg) % 2 != 0: if len(pos) == 0: d = 0 cost = 10**9 + 1 for aa in neg: if cost > abs(1 - aa) - abs(-1 - aa): cost = abs(1 - aa) - abs(-1 - aa) d = aa ans += sum([abs(-1 - x) for x in neg]) ans -= abs(-1 - d) ans += abs(1 - d) else: d1 = 0 cost1 = 10**9 + 1 for aa in neg: if cost1 > abs(1 - aa) - abs(-1 - aa): cost1 = abs(1 - aa) - abs(-1 - aa) d1 = aa d2 = 0 cost2 = 10**9 + 1 for aa in pos: if cost2 > abs(-1 - aa) - abs(1 - aa): cost2 = abs(-1 - aa) - abs(1 - aa) d2 = aa ans += sum([abs(1 - x) for x in pos]) ans += sum([abs(-1 - x) for x in neg]) if cost1 < cost2: ans -= abs(-1 - d1) ans += abs(1 - d1) else: ans -= abs(1 - d2) ans += abs(-1 - d2) else: ans += sum([abs(1 - x) for x in pos]) ans += sum([abs(-1 - x) for x in neg]) print(ans)