LoginSignup
0
0

ABC353をPythonで(A~D)

Posted at

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問題

後ろから見て行って

  1. 等倍で足すのはそれより後に出てくる数の個数
  2. その数より前に$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)
0
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
0
0