0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoder Beginner Contest 223 参戦記

Last updated at Posted at 2021-10-17

AtCoder Beginner Contest 223 参戦記

ABC223A - Exact Price

2分半で突破. 0円だけ特別であることを意識して書くだけ.

X = int(input())

if X == 0:
    print('No')
elif X % 100 == 0:
    print('Yes')
else:
    print('No')

ABC223B - String Shifting

6分で突破. 全部実際に生成すればいいですね.

S = input()

a = {S}
for i in range(1, len(S)):
    a.add(S[i:] + S[:i])
    a.add(S[:-i] + S[-i:])
a = sorted(a)
print(a[0])
print(a[-1])

ABC223C - Doukasen

26分半で突破、TLE1. 片側からだけ燃やしてかかる時間の半分の時間が、両側から燃やすのにかかる時間. 後は左からその時間でどこまで進むかシミュレーションすればOK! 所要時間をにぶたんして、左右からシミュレートしてちょうど燃え尽きるところを探したりして TLE してはいけません(笑).

from sys import stdin

readline = stdin.readline

N = int(readline())
AB = [tuple(map(int, readline().split())) for _ in range(N)]

s = sum(a / b for a, b in AB) / 2
result = 0
for a, b in AB:
    if s - a / b <= 0:
        result += s * b
        break
    s -= a / b
    result += a
print(result)

ABC223D - Restricted Permutation

48分半で突破. 考察が手強かったけど、思いついてしまえばそんなに実装は難しくはなくて面白かった. 既に自分より前に出ないといけない数が全て出終わっている数を管理し、これを「利用可能」と呼ぶ. 求めたい数列は辞書順最小なので、「利用可能」は性能の観点から heap で管理し、最小順に取り出して出力数列に加える. その値が出力数列に入ったことによって新たに「利用可能」が発生するかもしれないのでそれを処理する. もし循環などで矛盾があり数列Pが存在しない場合には、すべての数字を使い終わる前に「利用可能」が空になるので、出力数列の長さを確認すれば分かる.

from sys import stdin
from heapq import heappop, heappush, heapify

readline = stdin.readline

N, M = map(int, readline().split())
AB = [tuple(map(int, readline().split())) for _ in range(M)]

fronts = [set() for _ in range(N + 1)]
rears = [set() for _ in range(N + 1)]

availables = set(range(1, N + 1))
for a, b in AB:
    if b in availables:
        availables.remove(b)
    fronts[b].add(a)
    rears[a].add(b)
availables = list(availables)
heapify(availables)

result = []
while availables:
    x = heappop(availables)
    result.append(x)
    for y in rears[x]:
        fronts[y].remove(x)
        if len(fronts[y]) == 0:
            heappush(availables, y)
if len(result) != N:
    print(-1)
else:
    print(*result)
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?