[PYTHON] AtCoder 3. Algorithmus Praktischer Test Teilnahmebericht

AtCoder 3. Algorithmus Praktischer Test Teilnahmebericht

Es ist kostenlos und Chokudai sagte, dass ich möchte, dass Sie es erhalten, also habe ich im Gegensatz zu den letzten beiden Malen an der realen Sache teilgenommen. Das Ergebnis liegt mit 70 Punkten dazwischen. Das erste Mal sind 64 Punkte, das zweite Mal sind es 76 Punkte Weil es ein Punkt ist, ist es nur in der Mitte. Ich habe es am frühen Morgen wie die letzten zwei Male gemacht, aber da ich 3 Stunden geschlafen habe, konnte ich nicht anders, als von der Mitte aus schläfrig zu sein. Vielleicht war das der Grund, warum es viele WAs gab. Ich denke den Rest, aber ich denke es ist okay, weil sogar ein erfrischender Kopf gelöst werden kann und es nur noch eine Frage ist.

past202005A --Case Sensitive

Brechen Sie in 2 Minuten durch. Schreiben Sie einfach.

s = input()
t = input()

if s == t:
    print('same')
elif s.lower() == t.lower():
    print('case-insensitive')
else:
    print('different')

past202005B - Dynamische Bewertung

Es bricht in 10 ½ Minuten durch. Es ist ziemlich schwierig, obwohl es ein B-Problem ist! Zuerst nimmt es viel Zeit in Anspruch, weil die Person, die die Yukicoder-Formel gelöst hat, früh missverstanden hat, dass es der Typ mit einer hohen Punktzahl war.

N, M, Q = map(int, input().split())

score = [N] * (M + 1)
answered = [[False] * (M + 1) for _ in range(N + 1)]
for _ in range(Q):
    s = list(map(int, input().split()))
    if s[0] == 1:
        t = 0
        for i in range(1, M + 1):
            if answered[s[1]][i]:
                t += score[i]
        print(t)
    elif s[0] == 2:
        score[s[2]] -= 1
        answered[s[1]][s[2]] = True

past202005C-Sequenz mit gleichem Verhältnis

Durchbruch in 13,5 Minuten. TLE2, WA1. C Es ist ein Problem, aber wenn ich es naiv schreibe, TLE !? Während Sie einen Fehler machen und WA, AC essen.

Erläuterung PDF-Referenzimplementierung, setrecursionlimit bedeutungslos, ich bin nicht sicher, ob ich sys.stdin.buffer.readline anstelle von sys.stdin.readline verwende, a * r ** (n -1) Ist maximal 10 9 + 9 29 </ sup> </ sup>, aber ich frage mich, ob es gut ist. O (log N </ i>) Ich frage mich, ob ich das Schreiben vermeiden möchte.

A, R, N = map(int, input().split())

result = A
a = R
b = N - 1
while b != 0 and result <= 1000000000:
    if b & 1 != 0:
        result *= a
    a *= a
    b >>= 1

if result > 1000000000:
    print('large')
else:
    print(result)

past202005D - Lightning Bulletin Board

Es brach in 9,5 Minuten durch. Es war nicht allzu schwierig, weil ich einfach jeden Charakter ausgeschnitten und abgeglichen habe.

N = int(input())
s = [input() for _ in range(5)]

a = [
    '.###..#..###.###.#.#.###.###.###.###.###.',
    '.#.#.##....#...#.#.#.#...#.....#.#.#.#.#.',
    '.#.#..#..###.###.###.###.###...#.###.###.',
    '.#.#..#..#.....#...#...#.#.#...#.#.#...#.',
    '.###.###.###.###...#.###.###...#.###.###.'
]

result = []
for i in range(N):
    t = [s[j][i * 4:(i + 1) * 4] for j in range(5)]
    for j in range(10):
        for k in range(5):
            if t[k] != a[k][j * 4:(j + 1) * 4]:
                break
        else:
            result.append(j)
            break
print(''.join(str(i) for i in result))

past202005E --Sprinkler

Brechen Sie in 8,5 Minuten durch. Selbst wenn ich die Problembeschreibung lese, weiß ich nicht, ob sich die Umgebungsfarbe ändert, wenn ich die Farbe des laufenden Sprinklers ändere, aber ich dachte, ich sollte sie ändern, wenn sie WA wird, und sende sie AC. Unter diesem Gesichtspunkt wäre es ein Problem, wenn die laufenden Sprinkler nebeneinander liegen würden, sodass sie tatsächlich starten und stoppen und dann die nächste Abfrage. Es scheint, dass die Links bereits viele Male geschrieben wurden und es keinen Grund zur Sorge gibt.

N, M, Q = map(int, input().split())

links = [[] for _ in range(N + 1)]
for _ in range(M):
    u, v = map(int, input().split())
    links[u].append(v)
    links[v].append(u)
c = [0] + list(map(int, input().split()))

for _ in range(Q):
    s = list(map(int, input().split()))
    if s[0] == 1:
        x = s[1]
        print(c[x])
        for y in links[x]:
            c[y] = c[x]
    if s[0] == 2:
        x, y = s[1:]
        print(c[x])
        c[x] = y

past202005G --Grid Gold Move

Durchbruch in 40 und eine halbe Minute. WA2. Ich habe vergessen, -1 auszugeben, wenn es nicht erreichbar war, und unendlich auszugeben. Von den anderen 6 Bewegungsarten wurden nur 4 Arten von Auf, Ab, Links und Rechts implementiert. Ich habe meine Zeit verschwendet, weil ich das Eingabebeispiel nicht erhalten konnte. Nun, es ist nicht so schwierig, weil es eine Suche mit Breitenpriorität ist, die mich darüber nachdenken lässt, wie oft ich es schreiben werde. −200 ≤ x i </ sub>, y i </ sub>, X, Y ≤ 200 Wenn Sie es jedoch zu einem Leerzeichen machen, ist es am Ende unmöglich, neben dem Hindernis vorbeizukommen, aber es ist unpassierbar. Beachten Sie, dass Sie oben, unten, links und rechts nacheinander verteilen müssen.

from collections import deque

INF = float('inf')

N, X, Y = map(int, input().split())

t = [['.'] * 403 for _ in range(403)]
for _ in range(N):
    x, y = map(int, input().split())
    t[y + 201][x + 201] = '#'

d = [[INF] * 403 for _ in range(403)]
d[0 + 201][0 + 201] = 0
q = deque([(0, 0)])
while q:
    y, x = q.popleft()
    i, j = y + 201, x + 201
    if i + 1 < 403 and j - 1 >= 0 and t[i + 1][j - 1] != '#' and d[i + 1][j - 1] > d[i][j] + 1:
        d[i + 1][j - 1] = d[i][j] + 1
        q.append((y + 1, x - 1))
    if i + 1 < 403 and j + 1 < 403 and t[i + 1][j + 1] != '#' and d[i + 1][j + 1] > d[i][j] + 1:
        d[i + 1][j + 1] = d[i][j] + 1
        q.append((y + 1, x + 1))
    if i - 1 >= 0 and t[i - 1][j] != '#' and d[i - 1][j] > d[i][j] + 1:
        d[i - 1][j] = d[i][j] + 1
        q.append((y - 1, x))
    if i + 1 < 403 and t[i + 1][j] != '#' and d[i + 1][j] > d[i][j] + 1:
        d[i + 1][j] = d[i][j] + 1
        q.append((y + 1, x))
    if j - 1 >= 0 and t[i][j - 1] != '#' and d[i][j - 1] > d[i][j] + 1:
        d[i][j - 1] = d[i][j] + 1
        q.append((y, x - 1))
    if j + 1 < 403 and t[i][j + 1] != '#' and d[i][j + 1] > d[i][j] + 1:
        d[i][j + 1] = d[i][j] + 1
        q.append((y, x + 1))
if d[Y + 201][X + 201] == INF:
    print(-1)
else:
    print(d[Y + 201][X + 201])

past202005F - Zirkulationsmatrix

Brechen Sie in 40,5 Minuten durch. WA4. Eine Katastrophe, weil es ein Problem ist, Zeichen aus jeder Zeile der Matrix zu nehmen und ein Rundschreiben zu erstellen, aber das Missverständnis, dass es ein Problem ist, ein Rundschreiben mit allen Zeichen in der Matrix zu erstellen. Ich denke, Sie können es lösen, wenn Sie wissen.

N = int(input())
a = [input() for _ in range(N)]

t = ''
for i in range(N // 2):
    u = list(set(a[i]) & set(a[N - 1 - i]))
    if len(u) == 0:
        print(-1)
        exit()
    t += u[0]

if N % 2 == 0:
    print(t + t[::-1])
else:
    print(t + a[N // 2][0] + t[::-1])

past202005J - Rotierendes Sushi

Es bricht in 27,5 Minuten durch. Ich erinnerte mich an ABC134E - Sequenzzerlegung.

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

eater = [-1] * M
eater[0] = 1
t = [-1] * N
t[0] = a[0]
for i in range(1, M):
    ng = -1
    ok = N
    while abs(ng - ok) > 1:
        m = (ok + ng) // 2
        if a[i] > t[m]:
            ok = m
        else:
            ng = m
    if ok != N:
        t[ok] = a[i]
        eater[i] = ok + 1
print('\n'.join(str(i) for i in eater))

past202005I - Matrixoperation

Durchbruch in 68 Minuten. WA2, TLE2, RE2. N ≤ 10 5 </ sup> Ein Dummkopf, der eine Liste von N × N erstellt, ohne sie zu sehen. Es ist groß, wenn Sie tatsächlich Spalten ersetzen und verschieben Da es sich um eine Katastrophe handelt, verarbeite ich sie mit O (1) in der Lesetabelle, habe aber Zeit damit verschwendet, zu vergessen, dass der Zeilen- und Spaltenaustausch zum Zeitpunkt der Translokation vertauscht wird. Gibt es diesmal nicht viele Abfrageprobleme? (3 Fragen) Auge).

from sys import stdin
readline = stdin.readline

N = int(readline())
Q = int(readline())

result = []
transposed = False
rows = list(range(N + 1))
cols = list(range(N + 1))
for _ in range(Q):
    Query = list(map(int, readline().split()))
    if Query[0] == 1:
        A, B = Query[1:]
        if not transposed:
            t = rows[A]
            rows[A] = rows[B]
            rows[B] = t
        else:
            t = cols[A]
            cols[A] = cols[B]
            cols[B] = t
    elif Query[0] == 2:
        A, B = Query[1:]
        if not transposed:
            t = cols[A]
            cols[A] = cols[B]
            cols[B] = t
        else:
            t = rows[A]
            rows[A] = rows[B]
            rows[B] = t
    elif Query[0] == 3:
        transposed = not transposed
    elif Query[0] == 4:
        A, B = Query[1:]
        y, x = A, B
        if transposed:
            y, x = x, y
        y = rows[y]
        x = cols[x]
        result.append(N * (y - 1) + x - 1)
print('\n'.join(str(i) for i in result))

past202005H --Hall run

Brechen Sie in 63 Minuten und einer halben durch. WA2, RE1. Das Größte dieses Mal. Wenn Sie denken, dass es ein einfaches Problem ist, einen DP zu verteilen, WA. Im Moment, als ich mitten im Schreiben "T1 / 2" schrieb, dachte ich, ich würde es vermeiden und sagte: "Warum schreibst du" T1 * 0,5 "? Es ist eine Gleitkommazahl !!!" Bemerkt AC.

N, L = map(int, input().split())
x = set(map(int, input().split()))
T1, T2, T3 = map(int, input().split())

dp = [float('inf')] * (L + 4)
dp[0] = 0
for i in range(L):
    a = dp[i] + T1
    if i + 1 in x:
        a += T3
    if dp[i + 1] > a:
        dp[i + 1] = a

    a = dp[i] + T1 + T2
    if i + 2 in x:
        a += T3
    if dp[i + 2] > a:
        dp[i + 2] = a

    a = dp[i] + T1 + T2 * 3
    if i + 4 in x:
        a += T3
    if dp[i + 4] > a:
        dp[i + 4] = a

result = dp[L]
result = min(result, dp[L - 1] + T1 // 2 + T2 // 2)
result = min(result, dp[L - 2] + T1 // 2 + 3 * T2 // 2)
result = min(result, dp[L - 3] + T1 // 2 + 5 * T2 // 2)
print(result)

past202005K - Container verschieben

Ich habe aufgegeben, weil ich noch 20 Minuten Zeit hatte. Wie auch immer, ich muss 2 Fragen lösen, um eine fortgeschrittene Person zu werden. Wenn ich nur das aufzeichne, was unten steht, kann ich mit O (1) umziehen, aber welcher Schreibtisch ist jetzt eingeschaltet? Ist O (* N *), habe ich mich gefragt, was ich tun soll. Diesmal gibt es jedoch viele Abfrageprobleme (4. Frage).

past202005L --Supermarket

Ich habe aufgegeben, weil ich noch 20 Minuten Zeit hatte. Wie auch immer, ich muss 2 Fragen lösen, bevor ich ein fortgeschrittener Spieler werden kann. 1 ≤ a i </ sub> ≤ 2 Kann ich also zwei Prioritätswarteschlangen haben? Ist O (* N *), also dachte ich, es wäre unmöglich, vielleicht ein ausgeglichener Dichotomiebaum.

Recommended Posts

AtCoder 3. Algorithmus Praktischer Test Teilnahmebericht
AtCoder 1. Algorithmus Praktischer Test Virtueller Teilnahmebericht
AtCoder 2. Algorithmus Praktischer Test Virtueller Teilnahmebericht
3. Algorithmus Praktischer Test (PAST) Erklärung (Python)
AtCoder Judge System Update Testwettbewerb 202004 Teilnahmebericht
AtCoder Beginner Contest 181 Teilnahmebericht
AtCoder Beginner Contest 151 Teilnahmebericht
AtCoder Beginner Contest 176 Teilnahmebericht
AtCoder Beginner Contest 154 Teilnahmebericht
AtCoder Grand Contest 041 Teilnahmebericht
AtCoder Beginner Contest 166 Teilnahmebericht
AtCoder Grand Contest 040 Teilnahmebericht
AtCoder Beginner Contest 153 Teilnahmebericht
AtCoder Beginner Contest 145 Teilnahmebericht
AtCoder Beginner Contest 184 Teilnahmebericht
AtCoder Beginner Contest 165 Teilnahmebericht
AtCoder Beginner Contest 160 Teilnahmebericht
AtCoder Beginner Contest 169 Teilnahmebericht
AtCoder Beginner Contest 178 Teilnahmebericht
AtCoder Beginner Contest 163 Teilnahmebericht
AtCoder Beginner Contest 164 Teilnahmebericht
AtCoder Regular Contest 105 Teilnahmebericht
AtCoder Beginner Contest 150 Teilnahmebericht
AtCoder Beginner Contest 180 Teilnahmebericht
AtCoder Regular Contest 104 Teilnahmebericht
AtCoder Beginner Contest 156 Teilnahmebericht
AtCoder Beginner Contest 162 Teilnahmebericht
AtCoder Beginner Contest 157 Teilnahmebericht
AtCoder Beginner Contest 167 Teilnahmebericht
AtCoder Beginner Contest 179 Teilnahmebericht
AtCoder Anfängerwettbewerb 182
AtCoder Anfängerwettbewerb 146 Teilnahmebericht
AtCoder Beginner Contest 155 Teilnahmebericht
AtCoder Beginner Contest 174 Teilnahmebericht
AtCoder Beginner Contest 171 Teilnahmebericht
AtCoder Beginner Contest 149 Teilnahmebericht
AtCoder Anfängerwettbewerb 148 Teilnahmebericht
AtCoder Beginner Contest 170 Teilnahmebericht
Teilnahmebericht des AtCoder Chokudai Contest 005
AtCoder Grand Contest 047 Teilnahmebericht
AtCoder Beginner Contest 183 Teilnahmebericht
Teilnahmebericht des AtCoder HHKB Programmierwettbewerbs 2020
Teilnahmebericht des AtCoder Acing Programming Contest 2020
Teilnahmebericht des AtCoder Keyence Programming Contest 2020
Teilnahmebericht des AtCoder Panasonic Programming Contest 2020
Teilnahmebericht zum AtCoder Library Practice Contest (Python)
AtCoder Einführung in den Heuristik-Wettbewerbsbericht
abc154 teilnahmebericht
abc155 teilnahmebericht
Teilnahmebericht des AtCoder Sumitomo Mitsui Trust Bank Programmierwettbewerbs 2019
1. Algorithmus Praktischer Test Lösen Sie frühere Fragen mit Python
Teilnahmebericht der PyCon JP 2017
Teilnahmebericht des Programmierwettbewerbs 2020 der AtCoder Hitachi, Ltd.
2. Algorithmus Praktischer Test Löse vergangene Fragen mit Python (unvollendet)