こんにちは, Shinoryoです.
今回はAtCoder Beginner Contest 182を, Pythonで解いてみた結果を書き連ねていこうと思います.
AtCoder Beginner Contest 182 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
A - twiblr
求める値は
a, b = [int(x) for x in input().split()] | |
print(2*a+100-b) |
B - Almost GCD
n = int(input()) | |
a = sorted([int(x) for x in input().split()], reverse=True) | |
gcdmax, ans = 0, 0 | |
for k in range(2, a[0]+1): | |
gcdtemp = sum(a[i] % k == 0 for i in range(n)) | |
if gcdmax < gcdtemp: | |
gcdmax, ans = gcdtemp, k | |
print(ans) |
C - To 3
Pythonで組み合わせのリストを作成するには, itertools.combinations(リスト)を利用します.
import itertools | |
n = [int(x) for x in list(input())] | |
k = len(n) | |
for i in range(k+1, 0, -1): | |
for c in itertools.combinations(n, i): | |
if sum(c) % 3 == 0: | |
print(k-i) | |
exit() | |
print(-1) |
D - Wandering
愚直に行うと
n = int(input()) | |
a = [int(x) for x in input().split()] | |
resultmax, result = 0, 0 | |
for i in range(n): | |
for j in range(i+1): | |
result += a[j] | |
resultmax = max(resultmax, result) | |
print(resultmax) |
そこで, 「正の向きに
- ある変数
に対して, を順に足していくことで「動作 の合計の座標の変化」が分かります. - また,
が最大だったときの値を(変数 に)保存し続けることで, 「動作 を座標 で始めた場合の, 開始から終了までの座標の最大値」が分かります. - さらに,
を順に足し続けてきたある変数 に対して, を足すことで「動作 が行われている間の座標の最大値」が分かります. - つまり,
が最大だったときの値を(変数 に)保存し続けることで, 求める最大値を得ることができます.
この方法なら
n = int(input()) | |
a = [int(x) for x in input().split()] | |
x, r, p, q = 0, 0, 0, 0 | |
for i in range(n): | |
p += a[i] | |
q = max(p, q) | |
r = max(r, x+q) | |
x += p \n | |
print(r) |
E以降
E以降は私の能力不足故に省略いたします.
0 件のコメント:
コメントを投稿 (Please feel free to ask me about your questions! You can use Japanese or English in the comments.)