競技プログラミング
ABC247 解説的なやつ
公開日:
2022/04/10
ABC247 解説的なやつ

4完して気分が良いので

ABC 247

A - Move Right

$ 0 $ と$ S[0:3] $を結合して出力する

s = input()
print("0" + s[:-1])

B - Unique Nicknames

あだなは、「自分以外の姓あるいは名のどちらとも一致しない」ので、姓と名についてのCounterを作る
Counterは辞書的なやつで、ある値が配列に何回出てきたかを数えてくれる
普通に辞書で書いても良い(そっちのほうが良さそう)

from collections import Counter

n = int(input())
ST = [input().split() for _ in range(n)]  # 入力を受け取る 
s = Counter([ST[_][0] for _ in range(n)] + [ST[_][1] for _ in range(n)])  # 姓と名が何回現れてるか数える
for i in range(n):
    st, tt = ST[i]
    if s[tt] == 1 or s[st] == 1 or (st == tt and s[st] == 2):
        continue
    exit(print("No"))
print("Yes")

C - 1 2 1 3 1 2 1

割りと愚直に再帰を書く
この時、値(私のコードだとS[i]S[i])を記録しておかないと、爆発する

def solve( n ):
    if n == 1:
        return "1"
    if S[n - 1] == -1:
        S[n - 1] = solve(n - 1)
    return f"{S[n - 1]} {n} {S[n - 1]}"


N = int(input())
S = [-1 for _ in range(30)]
ans = solve(N)
print(ans)

D - Cylinder

dequeを知ってると解けそう(dequeは配列っぽいやつで、先頭・末尾のデータを削除・追加がO(N)O(N)で出来る)

from collections import deque

q = int(input())
d = deque()
for _ in range(q):
    t = input().split()
    if t[0] == "1":
        x, c = map(int, t[1:])  # 値、個数
        d.append((x, c))
    else:
        c = int(t[1])  # 個数
        total = 0
        while True:
            if c <= 0:
                break
            a, b = d.popleft()
            if b <= c:
                total += a * b
                c -= b
            else:
                total += c * a
                d.appendleft((a, b - c))
                c = 0
        print(total)
loading...