3
0

More than 3 years have passed since last update.

AtCoder Beginner Contest 154 参戦記

Last updated at Posted at 2020-02-09

AtCoder Beginner Contest 154 参戦記

ABC154A - Remaining Balls

2分半で突破. 変数が5つもあることに一瞬戸惑ったけど、書くだけだった.

S, T = input().split()
A, B = map(int, input().split())
U = input()

if U == S:
    A -= 1
else:
    B -= 1
print(A, B)

ABC154B - I miss you...

1分で突破. 書くだけ.

S = input()

print('x' * len(S))

ABC154C - Distinct or Not

2分で突破. 書くだけ. ABC063B - Varied を思い出した.

N = int(input())
A = list(map(int, input().split()))

if len(set(A)) == N:
    print('YES')
else:
    print('NO')

ABC154D - Dice in Line

10分で突破. リスト p から、平均値のリスト m を作って、幅 K の Sliding Window で最大値を求めるだけ.

N, K = map(int, input().split())
p = list(map(int, input().split()))

m = [(e + 1) / 2 for e in p]

t = sum(m[0:K])
result = t
for i in range(N - K):
    t -= m[i]
    t += m[i + K]
    if t > result:
        result = t
print(result)

ABC154E - Almost Everywhere Zero

敗退. 前に解けなくて放置したアレと同じ問題だなあと思ったが、そのときに解いておかなかったのが運の尽きだった…….

追記: 桁DP すれば良いわけですが、リストの次数が上がるととたんに遅くなる Python なので、次元を上げずに変数を分けて書いてみました.

N = input()
K = int(input())

a = 1
b = [0] * (K + 1)
b[0] = 1
b[1] = int(N[0]) - 1

for c in N[1:]:
    t = int(c)
    for i in range(K - 1, -1, -1):
        b[i + 1] += b[i] * 9
    if t != 0:
        if a + 1 <= K:
            b[a + 1] += t - 1
        if a <= K:
            b[a] += 1
        a += 1

if a == K:
    print(b[K] + 1)
else:
    print(b[K])
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0