[PYTHON] AtCoder Grand Contest Past Question Challenge 2

AtCoder Grand Contest Past Question Challenge 2

AGC009A - Multiple Array

Es ist leicht zu erkennen, dass die Taste A N </ sub> in umgekehrter Reihenfolge zur Taste A 1 </ sub> gedrückt wird. A i </ sub> ist B i < Ein Vielfaches von / sub> bedeutet A i </ sub> mod B i </ sub> = 0, also A i </ sub> mod B Wenn i </ sub> nicht 0 ist, drücken Sie B i </ sub> - A i </ sub> mod B i </ sub> mal. Übrigens bis dahin Beachten Sie, dass A i </ sub> um die Häufigkeit erhöht, mit der Sie darauf drücken. Auf der Grundlage des oben Gesagten habe ich den folgenden Code geschrieben, um nach einer Antwort zu fragen.

N = int(input())

A = [None] * N
B = [None] * N
for i in range(N):
    A[i], B[i] = map(int, input().split())

result = 0
for i in range(N - 1, -1, -1):
    t = (A[i] + result) % B[i]
    if t != 0:
        result += B[i] - t
print(result)

AGC011A - Airport Bus

Der Bus fährt in dem Moment ab, in dem das Zeitlimit der ersten wartenden Person kommt oder die wartende Person zu C Personen wird. Geben Sie also das Zeitlimit der ersten Person und die aktuelle Anzahl der wartenden Personen in die Variablen ein. Drehen Sie einfach die Schleife. Beachten Sie, dass die Zeit T i </ sub> nicht monoton ansteigt, obwohl es sich um den i-ten Passagier handelt.

N, C, K = map(int, input().split())
T = [int(input()) for _ in range(N)]
T.sort()

c = 0
l = float('inf')
result = 0
for i in range(N):
    t = T[i]
    if t > l:
        result += 1
        l = float('inf')
        c = 0
    if c == 0:
        l = t + K
    c += 1
    if c == C:
        result += 1
        l = float('inf')
        c = 0
if c != 0:
    result += 1
print(result)

AGC034A - Kenken Race

Es ist für Menschen einfach, es von Hand zu tun, aber ich stöhnte, dass es ärgerlich war, es umzusetzen, aber ich habe nur übersehen, dass ich nur nach rechts gehen konnte (lacht). Vorrang hat derjenige mit dem Ziel auf der rechten Seite Wenn Sie es nicht bewegen können, bewegen Sie das andere, und wenn Sie beide nicht bewegen können, zeigen Sie Nein an, das war's.

N, A, B, C, D = map(int, input().split())
S = input()


def move_snuke():
    global A, B
    if B == D:
        return False
    if S[B + 1] == '.' and A != B + 1:
        B += 1
        return True
    if S[B + 2] == '.' and A != B + 2:
        B += 2
        return True
    return False


def move_fnuke():
    global A, B
    if A == C:
        return False
    if S[A + 1] == '.' and B != A + 1:
        A += 1
        return True
    if S[A + 2] == '.' and B != A + 2:
        A += 2
        return True
    return False


S = '#' + S
while True:
    if C < D:
        if not move_snuke():
            if not move_fnuke():
                print('No')
                break
    else:
        if not move_fnuke():
            if not move_snuke():
                print('No')
                break
    if A == C and B == D:
        print('Yes')
        break

AGC035A - XOR Circle

Wenn die erste a und die zweite b ist, ist die dritte a x oder b, die vierte ist a, die fünfte ist b und es erscheinen nur drei Arten von Zahlen. Also a i < Wenn es 4 oder mehr Typen von / sub> -Nummern gibt, können Sie an diesem Punkt Nein setzen. Wenn es 3 Typen gibt, gibt es nur 9 Typen in den ersten 2 und selbst wenn Sie alle Kombinationen simulieren, ist N ≤ 10 5 </ sup > Von bis maximal O (9 × 10 5 </ sup>) ist AC möglich.

from itertools import product

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

c = {}
for e in a:
    c.setdefault(e, 0)
    c[e] += 1

if len(set(c)) > 3:
    print('No')
    exit()

t = {}
for x, y in product(set(c), repeat=2):
    i = x
    j = y
    t[i] = 1
    if t[i] > c[i]:
        continue
    t.setdefault(j, 0)
    t[j] += 1
    if t[j] > c[j]:
        continue
    for _ in range(N - 2):
        k = i ^ j
        t.setdefault(k, 0)
        t[k] += 1
        c.setdefault(k, 0)
        if t[k] > c[k]:
            j = -1
            break
        i, j = j, k
    if j ^ x == y:
        print('Yes')
        exit()
print('No')

AGC028A - Two Abbreviations

Da L durch N und M teilbar ist, ist es ein Vielfaches des minimalen gemeinsamen Vielfachen von N und M. Wenn L / N * i == L / M * j, muss es S [i] == T [j] sein, Selbst wenn L zu L * a wird, ändert sich das zu vergleichende Paar von i und j nicht, da es auf beiden Seiten nur mit a multipliziert wird. Da die Antwort die kürzeste ist, ist L das minimale gemeinsame Vielfache von N und M. Werden.

from fractions import gcd


def lcm(x, y):
    return x // gcd(x, y) * y


N, M = map(int, input().split())
S = input()
T = input()

for i in range(N):
    if M * i % N == 0 and S[i] != T[M * i // N]:
        print(-1)
        exit()
print(lcm(N, M))

AGC022A - Diverse Word

Das nächste bunte Wort ist

  1. Wenn die Länge der Zeichenfolge weniger als 26 beträgt, fügen Sie die kleinsten nicht verwendeten Zeichen in lexikalischer Reihenfolge hinzu.
  2. Wenn die Länge der Zeichenfolge 26 Zeichen beträgt, nehmen Sie das letzte Zeichen und fügen Sie das letzte Zeichen hinzu, das größer als das letzte Zeichen und das kleinste in der Wörterbuchreihenfolge ist. Wenn es so etwas nicht gibt, nimm den letzten Buchstaben und wiederhole ihn.

Wird sein.

Immerhin handelt es sich um eine Zeichenfolge mit einer maximalen Länge von 26, sodass das Hinzufügen oder Hinzufügen kein Problem darstellt, sodass die Implementierung nicht so schwierig ist.

def next_diverse_word(s):
    alphabets = set(chr(ord('a') + i) for i in range(26))
    if s == 'zyxwvutsrqponmlkjihgfedcba':
        return -1
    r = alphabets - set(s)
    if len(r) != 0:
        return s + sorted(r)[0]
    s = list(s)
    r = [s[-1]]
    s = s[:-1]
    while True:
        k = s[-1]
        r.append(s[-1])
        s = s[:-1]
        t = [c for c in r if c > k]
        if len(t) != 0:
            s.append(sorted(t)[0])
            return ''.join(s)


S = input()
print(next_diverse_word(S))

Recommended Posts

AtCoder Grand Contest Past Question Challenge 2
AtCoder Grand Contest Vergangene Frage Herausforderung 1
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 Past Question Review (12/5)
AtCoder Grand Contest 048 Bewertung
AtCoder Grand Contest 045 Bewertung
AtCoder Grand Contest 044 Bewertung
AtCoder Grand Contest 046 Bewertung
AtCoder Grand Contest 041 Teilnahmebericht
AtCoder Grand Contest 040 Teilnahmebericht
AtCoder Grand Contest 047 Teilnahmebericht
Fordern Sie AtCoder heraus
AtCoder Beginner Contest 066 Überprüfen Sie frühere Fragen
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 117 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 076 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 047 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 083 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen