[PYTHON] AtCoder Grand Contest Vergangene Frage Herausforderung 1

AtCoder Grand Contest Vergangene Frage Herausforderung 1

AGC003B - Simplified mahjong

Es ist in Ordnung, die maximale Anzahl von Paaren mit derselben Karte zu erstellen, bei einem Überschuss zu übertragen und der Übertragung Vorrang einzuräumen (dh die aktuelle Karte zu übertragen, wenn ein Überschuss vorliegt), jedoch 0 Karten Wenn eine Übertragung erfolgt, gibt es keine Karte, die vorrangig verwendet werden kann. Sie müssen die Übertragung also verwerfen. Wenn Sie sich darum kümmern, ist dies in Ordnung.

N = int(input())

result = 0
remainder = 0
for _ in range(N):
    A = int(input())
    result += (A + remainder) // 2
    if A == 0:
        remainder = 0
    else:
        remainder = (A + remainder) % 2
print(result)

AGC016A - Shrinking

Da die Länge von s höchstens 100 beträgt und es nur 26 Arten von Alphabeten gibt, ist TLE auch dann nicht TLE, wenn es gerundet ist. Für alle in s enthaltenen Alphabete gilt, vorausgesetzt, es bleibt am Ende, die Zeichenfolge t der Länge N. Der Minimalwert der Anzahl von Operationen kann erhalten werden, indem tatsächlich die Operation zum Ändern der Zeichenkette t'der Länge N-1 ausgeführt wird.

s = input()


def f(s, c):
    result = 0
    while len(set(s)) != 1:
        t = ''
        for i in range(len(s) - 1):
            if s[i] == c or s[i + 1] == c:
                t += c
            else:
                t += s[i]
        s = t
        result += 1
    return result


result = float('inf')
for c in set(s):
    result = min(result, f(s, c))
print(result)

AGC017A - Biscuits

Sie können eine gerade Anzahl von Beuteln mit einer ungeraden Zahl essen, und Sie können so viele Beutel mit einer geraden Zahl haben, wie Sie möchten. Wenn der Beutel mit einer ungeraden Zahl ein Beutel ist und der Beutel mit einer geraden Zahl b Beutel ist, lautet die Antwort (<sub). > a </ sub> C 0 </ sub> + a </ sub> C 2 </ sub> + ... + a </ sub> C Etage (a / 2) * 2 </ sub>) * ( b </ sub> C 0 </ sub> + b </ sub> C 1 </ sub> + ... + b </ sub> C b </ sub>). Übrigens b </ sub> C 0 </ sub> + b < / sub> C 1 </ sub> + ... + b </ sub> C b </ sub> ist 2 b </ sup>, der Rest ist also eine Schleife Wenden Sie sich einfach an die Anzahl der Möglichkeiten, um eine ungerade Anzahl von Taschen auszuwählen.

def comb(n, k):
    if n - k < k:
        k = n - k
    if k == 0:
        return 1
    a = 1
    b = 1
    for i in range(k):
        a *= n - i
        b *= i + 1
    return a // b


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

odds = sum(a % 2 for a in A)
evens = len(A) - odds

print(sum(comb(odds, i) for i in range(P, odds + 1, 2)) * (2 ** evens))

AGC007A - Shik and Stone

Während des Bewegungsprozesses bedeutet die Tatsache, dass sich das Stück immer nach rechts oder unten bewegte, dass die Anzahl der Bewegungen (H -1) + (W -1) beträgt. Die Nummer 1 von # einschließlich des Startpunkts ist H + W. - Wenn es eins ist, bedeutet dies, dass es sich nicht nach oben oder links bewegt.

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

if H + W - 1 == sum(a.count('#') for a in A):
    print('Possible')
else:
    print('Impossible')

AGC031A - Colorful Subsequence

Wenn a n-mal in der Zeichenfolge S vorkommt, dann ein Muster, das kein a verwendet, ein Muster, das das erste a verwendet, ein Muster, das das zweite a verwendet, ... ein Muster, das das n-te a verwendet Es gibt ein n + 1-Muster von. Da die Anzahl der Kombinationen für jedes Zeichen unabhängig ist, besteht die Antwort darin, die Anzahl der Auftritte für jedes Zeichen zu zählen und die Anzahl der Auftritte + 1 zu addieren.

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

MOD = 1000000007

d = {}
for c in S:
    if c in d:
        d[c] += 1
    else:
        d[c] = 1

result = 1
for x in d.values():
    result *= x + 1
    result %= MOD
result += MOD - 1
result %= MOD

print(result)

Recommended Posts