AtCoder Beginner Contest 353
A問題
順番に見ていく
A
n = int(input())
h = list(map(int, input().split()))
for i, h_i in enumerate(h, 1):
if h[0] < h_i:
print(i)
exit()
print(-1)
B問題
シミュレーション
B
n, k = map(int, input().split())
a = list(map(int, input().split()))
ans = 0
chair = k
for a_i in a:
if a_i <= chair:
chair -= a_i
else:
ans += 1
chair = k - a_i
print(ans + (chair < k))
C問題
順番に見て行って、その数と足すと$10 ^ 8$以上になるものの数を数えてその分%10^8$を引く
C
from sortedcontainers import SortedList
n = int(input())
a = list(map(int, input().split()))
mod = 10 ** 8
ans = 0
S = SortedList()
for i, a_i in enumerate(a, 1):
t = S.bisect_left(mod - a_i)
ans += a_i * (n - 1) - mod * (i - 1 - t)
S.add(a_i)
print(ans)
D問題
後ろから見て行って
- 等倍で足すのはそれより後に出てくる数の個数
- その数より前に$j$桁の数が$d_j$個あったとき、$a_i \times 10 ^ j \times d_j$答えに加算される
D
n = int(input())
a = list(input().split())
mod = 998244353
d = [0] * 20
ans = 0
for i, a_i in enumerate(reversed(a)):
ans += int(a_i) * (n - 1 - i) % mod
for j, d_j in enumerate(d):
ans += int(a_i) * 10 ** j * d_j % mod
ans %= mod
# print(ans)
d[len(a_i)] += 1
print(ans)