[PYTHON] AtCoder Anfängerwettbewerb Past Question Challenge 7

AtCoder Anfängerwettbewerb Past Question Challenge 7

ABC046D - AtCoDeer und komischer Janken

Wenn Sie genau den gleichen Zug wie TopCoDeer ausführen, beträgt die Punktzahl 0 Punkte, sodass die maximale Punktzahl 0 Punkte oder mehr beträgt. Vorerst habe ich beschlossen, genau den gleichen Zug wie TopCoDeer auszuführen, und die Anzahl der Pars und Goos angegeben. Wenn Sie die Anzahl der Male zählen und so oft von der letzten Goo auf Par wechseln, wie Sie die Bedingungen erfüllen, erhalten Sie die höchste Punktzahl.

s = input()

print(max((s.count('g') * 2 - len(s)) // 2, 0))

ABC097D - Equals

Wenn 1 und 2 ausgetauscht werden können und 2 und 3 ausgetauscht werden können, können auch 1 und 3 ausgetauscht werden. Das heißt, wenn sie sich in derselben Union befinden, können sie getauscht werden. Union Find tree. Aber ich habe noch nie gehört, dass es Zeiten gibt, in denen das Sortieren von Blasen nicht möglich ist, also ist es wahrscheinlich in Ordnung. Intuitiv sollten Sie sie in der Reihenfolge vom Ende an sortieren. Also für alle p i </ sub> gleich Überprüfen Sie, ob die Vereinigung ein i enthält und die Summe der Zahlen die Antwort ist.

from sys import setrecursionlimit


def find(parent, i):
    t = parent[i]
    if t < 0:
        return i
    t = find(parent, t)
    parent[i] = t
    return t


def unite(parent, i, j):
    i = find(parent, i)
    j = find(parent, j)
    if i == j:
        return
    parent[j] += parent[i]
    parent[i] = j


setrecursionlimit(10 ** 5)


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

parent = [-1] * N
for _ in range(M):
    x, y = map(int, input().split())
    unite(parent, x - 1, y - 1)

result = 0
for i in range(N):
    if find(parent, i) == find(parent, p[i] - 1):
        result += 1
print(result)

ABC043D --Unbalanced

Wenn Sie überprüfen, ob die Mehrheit aller Teilzeichenfolgen dasselbe Zeichen ist, ist dies * O * (* N * 2 </ sup>), sodass TLE unvermeidlich ist. Wenn die Mehrheit dasselbe Zeichen ist, ist es übrigens dasselbe. Das gleiche Zeichen wird mit zwei aufeinanderfolgenden Zeichen oder einem Leerzeichen dazwischen angezeigt. Dies kann sofort erkannt werden, indem tatsächlich ein Zeichen mit derselben Mehrheit erstellt wird. * O * (* N *) kann verwendet werden, um zu überprüfen, ob dies vorhanden ist. Sie können es überprüfen, um es zu lösen.

s = input()

for i in range(len(s) - 1):
    if s[i] == s[i + 1]:
        print(*[i + 1, i + 2])
        exit()
for i in range(len(s) - 2):
    if s[i] == s[i + 2]:
        print(*[i + 1, i + 3])
        exit()
print(*[-1, -1])

ABC105D - Candy Distribution

Wenn Sie es in naiv schreiben, * O * (* N * 3 </ sup>), ist es * O * (* N * 2 </ sup>), auch wenn es durch die kumulative Summe gelockert wird. Anstatt "die Summe ist ein Vielfaches von M" zu zählen, zählen Sie zuerst "die Summe der durch M geteilten Reste ist 0". Dann ist A </ sub> 1 </ sub>, A. 1 </ sub> + A 2 </ sub>, ..., A 1 </ sub> + A 2 </ sub> ... A N. Zählen Sie die Anzahl von </ sub> geteilt durch M. Wenn t m </ sub> die Anzahl der Vorkommen des Restes m ist, ist die Anzahl zu zählen, wenn l = 1, r = 1..N Ist t <0> </ sub>. Als nächstes sollte l = 2, r = 1..N gezählt werden, aber die Anzahl von A 1 </ sub> geteilt durch M wird von jedem reduziert. Also denke ich für einen Moment, dass t 1 </ sub>% M </ sub>, aber da l = 1 und r = 1 nur A </ sub> 1 </ sub> waren, ist dies Muss weggelassen werden, was t 1 </ sub>% M </ sub> -1 ist, und dieses muss weggelassen werden, selbst wenn nach l = 3 berechnet wird. Nicht. Dann schleife zu l = N, um die Antwort zu erhalten.

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

t = {}
c = 0
for a in A:
    c += a
    c %= M
    if c in t:
        t[c] += 1
    else:
        t[c] = 1

result = 0
if 0 in t:
    result += t[0]
c = 0
for a in A:
    c += a
    c %= M
    t[c] -= 1
    result += t[c]
print(result)

ABC064D - Insertion

Da wir nach dem kleinsten in lexikalischer Reihenfolge suchen, möchten wir '(' so weit wie möglich nach links und ')' so weit wie möglich nach rechts einfügen. Also ist '(' ganz links und ')' Angenommen, Sie fügen nur am rechten Ende ein. Ich frage mich, wie viele danach eingefügt werden. Da die Länge der Zeichenfolge jedoch höchstens 100 beträgt, wird sie nicht zu TLE, selbst wenn sie tatsächlich transformiert wird. Während Sie die gepaarten Klammern löschen, Fügen Sie einfach am linken oder rechten Rand Klammern hinzu, bis die Zeichenfolge leer ist.

N = int(input())
S = input()

result = S
while True:
    while True:
        t = S.replace('()', '')
        if t == S:
            break
        S = t
    if S == '':
        break
    elif S[0] == ')':
        S = '(' + S
        result = '(' + result
    elif S[0] == '(':
        S = S + ')'
        result = result + ')'
print(result)

ABC088D - Grid Repainting

Die maximale Punktzahl besteht darin, den kürzesten Weg von (1, 1) nach (H, W) in der Suche nach Breitenpriorität zu finden und alle weißen Zellen, die den kürzesten Weg nicht weitergegeben haben, in Schwarz zu ändern. Die Antwort ist die Anzahl der weißen Zellen. - Die Anzahl der Quadrate auf der kürzesten Route.

H, W = map(int, input().split())
s = [input() for _ in range(H)]

dp = [[2501] * W for _ in range(H)]
dp[0][0] = 1

q = [(0, 0)]
while q:
    nq = []
    while q:
        y, x = q.pop()
        t = dp[y][x] + 1
        if y < H - 1:
            if s[y + 1][x] == '.' and dp[y + 1][x] > t:
                dp[y + 1][x] = t
                nq.append((y + 1, x))
        if y > 0:
            if s[y - 1][x] == '.' and dp[y - 1][x] > t:
                dp[y - 1][x] = t
                nq.append((y - 1, x))
        if x < W - 1:
            if s[y][x + 1] == '.' and dp[y][x + 1] > t:
                dp[y][x + 1] = t
                nq.append((y, x + 1))
        if x > 0:
            if s[y][x - 1] == '.' and dp[y][x - 1] > t:
                dp[y][x - 1] = t
                nq.append((y, x - 1))
    q = nq

if dp[H - 1][W - 1] == 2501:
    print(-1)
else:
    print(sum(s[y].count('.') for y in range(H)) - dp[H - 1][W - 1])

Recommended Posts

AtCoder Anfängerwettbewerb Past Question Challenge 6
AtCoder Anfängerwettbewerb Past Question Challenge 4
AtCoder Anfängerwettbewerb Past Question Challenge 9
AtCoder Anfängerwettbewerb Past Question Challenge 7
AtCoder Anfängerwettbewerb Past Question Challenge 10
AtCoder Anfängerwettbewerb Past Question Challenge 5
AtCoder Grand Contest Past Question Challenge 2
AtCoder Grand Contest Vergangene Frage Herausforderung 1
AtCoder Past Question Review (12 / 6,7)
AtCoder Past Question Review (12/5)
Fordern Sie AtCoder heraus
AtCoder Beginner Contest 066 Überprüfen Sie frühere Fragen
# 2 Python-Anfänger fordern AtCoder heraus! ABC085C --Otoshidama
AtCoder Beginner Contest 102 Rückblick auf frühere Fragen
AtCoder Beginner Contest 072 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 062 Rückblick auf frühere Fragen
AtCoder Beginner Contest 113 Rückblick auf frühere Fragen
AtCoder Beginner Contest 074 Rückblick auf frühere Fragen
AtCoder Beginner Contest 051 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 119 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen
AtCoder Beginner Contest 070 Rückblick auf frühere Fragen
AtCoder Beginner Contest 105 Rückblick auf frühere Fragen
AtCoder Beginner Contest 112 Rückblick auf frühere Fragen
AtCoder Beginner Contest 089 Rückblick auf frühere Fragen
AtCoder Beginner Contest 069 Rückblick auf frühere Fragen
AtCoder Beginner Contest 079 Rückblick auf frühere Fragen
AtCoder Beginner Contest 056 Rückblick auf frühere Fragen
AtCoder Beginner Contest 087 Rückblick auf frühere Fragen
AtCoder Beginner Contest 067 Rückblick auf frühere Fragen
AtCoder Beginner Contest 093 Rückblick auf frühere Fragen
AtCoder Beginner Contest 046 Rückblick auf frühere Fragen
AtCoder Beginner Contest 123 Überprüfung früherer Fragen
AtCoder Beginner Contest 049 Rückblick auf frühere Fragen
AtCoder Beginner Contest 078 Rückblick auf frühere Fragen
AtCoder Beginner Contest 081 Rückblick auf frühere Fragen
AtCoder Beginner Contest 060 Rückblick auf frühere Fragen
AtCoder Beginner Contest 104 Rückblick auf frühere Fragen
AtCoder Beginner Contest 057 Rückblick auf frühere Fragen
AtCoder Beginner Contest 121 Rückblick auf frühere Fragen
AtCoder Beginner Contest 126 Rückblick auf frühere Fragen
AtCoder Beginner Contest 090 Rückblick auf frühere Fragen
AtCoder Beginner Contest 103 Rückblick auf frühere Fragen
AtCoder Beginner Contest 061 Rückblick auf frühere Fragen
AtCoder Beginner Contest 059 Rückblick auf frühere Fragen
AtCoder Beginner Contest 044 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen
AtCoder Beginner Contest 124 Rückblick auf frühere Fragen
AtCoder Beginner Contest 116 Rückblick auf frühere Fragen
AtCoder Beginner Contest 097 Rückblick auf frühere Fragen
AtCoder Beginner Contest 088 Rückblick auf frühere Fragen
AtCoder Beginner Contest 092 Rückblick auf frühere Fragen
AtCoder Beginner Contest 099 Rückblick auf frühere Fragen
AtCoder Beginner Contest 065 Rückblick auf frühere Fragen
AtCoder Beginner Contest 094 Rückblick auf frühere Fragen
AtCoder Beginner Contest 063 Rückblick auf frühere Fragen