Rückblick auf den AtCoder Beginner Contest 167 bis Frage E (Python)

Dies ist ein Übersichtsartikel für Anfänger von Wettkampfprofis.

Die Lösung, die ich hier schreibe, wird geschrieben, während ich mir den Kommentar und die Beiträge anderer Leute ansehe. Es ist möglicherweise nicht das, was Sie tatsächlich eingereicht haben.

A - Registration

Die Zeichenkette T ist eine Frage, um zu beantworten, ob die Zeichenkette S am Ende ein Zeichen hat.

Wir verglichen, indem wir T mit T [: -1] schnitten.

S = input()
T = input()

if S == T[:-1]:
  print('Yes')
else:
  print('No')

B - Easy Linear Programming

Es gibt $ A $ für Karten mit der Bezeichnung 1, $ B $ für Karten mit der Bezeichnung 0 und $ C $ für Karten mit der Bezeichnung -1. Der Maximalwert bei der Auswahl von $ K $ ist eine zu beantwortende Frage.

Der Zählung in der Größenordnung von 1, 0, -1 sollte Vorrang eingeräumt werden. Da es sich jedoch um $ A, B, C \ leq2 \ times10 ^ 9 $ handelt, tut es weh, wenn Sie versuchen, es in ein Array zu legen oder mit for zu drehen. (Ein Verlust)

A, B, C, K = map(int, input().split())
out = min(A, K) - max(0, K-A-B)
print(out)

C - Skill Up

Das Problem besteht darin, den niedrigsten Preis in einer Kombination zu finden, bei der alle für jede Zahl summierten Elemente $ X $ überschreiten.

Das Limit von $ N, M \ leq 12 $ ermöglicht eine vollständige Abdeckung. Parallele Berechnungen wurden durchgeführt, indem "itertools.product ()" und dann "numpy" für die vollständige Suche verwendet wurden.

import itertools
import numpy as np

N, M, X = map(int, input().split())
items = np.array([list(map(int, input().split())) for _ in range(N)], dtype=np.int32)

out = 10**18
for c in itertools.product([False, True], repeat=N):
    tmp = np.sum(items[np.where(c)], axis=0)
    if M == np.count_nonzero(tmp[1:] >= X):
      out = min(out, tmp[0])

if out == 10**18:
  print(-1)
else:
  print(out) 

D - Teleporter

Jede Stadt hat ein Warp-Ziel. Die Frage ist, K-mal aus der ersten Stadt zu teleportieren und die ankommende Stadt zu beantworten.

Wenn Sie ab dem Limit von $ K \ leq10 ^ {18} $ richtig suchen, ist dies TLE. Ich gab auf. Sehen Sie die Antworten anderer Leute.

Es sollte beachtet werden, dass der Bereich von K $ K \ leq 10 ^ {18} $ ist, aber der Bereich von N $ N \ leq 2 \ mal 10 ^ {5} $ ist. Mit anderen Worten, diese Suche wird immer wiederholt.

Suchen Sie zunächst normal. Speichern Sie die Zeit t_zero, die zuerst in jeder Stadt angekommen ist, als Array und berechnen Sie die Zeit für eine Runde, wenn Sie dieselbe Stadt ein zweites Mal erreichen. Nehmen Sie die verbleibende Laufzeit einer Runde von K. Verwenden Sie die zuvor durchgeführten Berechnungen erneut, ohne erneut nach der verbleibenden Zeit k suchen zu müssen. Ich habe den folgenden Code übergeben.

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

t_zero = [-1] * N

t = 0
a = 1

while t_zero[a-1] == -1:
  if t == K:
    break
  t_zero[a-1] = t
  t += 1
  a = A[a-1]
else:
  k = (K - t_zero[a-1]) % (t - t_zero[a-1])
  a = t_zero.index(t_zero[a-1] + k) + 1
print(a)

E - Colorful Blocks

Es ist ein Problem, die in einer horizontalen Reihe angeordneten Blöcke farblich zu kennzeichnen. Es kann jedoch erlaubt sein, dass dieselbe Farbe bis zu K nebeneinander liegt, und wie viele Kombinationen gibt es?

Es gibt $ M \ times (M-1) ^ {N-1} $ Kombinationen, in denen N Stücke von M Farbe so angeordnet sind, dass sie nicht nebeneinander liegen.

Wenn K-Gruppenblöcke nebeneinander liegen können, kann gesagt werden, dass $ N-K $ -Blöcke so angeordnet sind, dass die Farben nicht ausgerichtet sind. Außerdem können Sie die Kombination benachbarter Blöcke mit $ _ {N-1} C _ {K} $ auswählen.

Mit anderen Worten, Sie können die folgende Formel berechnen.

\sum M\times (M-1)^{N-k-1} \times _{N-1} C _ k

Folgendes ist implementiert. Während der Produktion konnte ich die Berechnung jedoch nicht gut beschleunigen und nicht rechtzeitig lösen.

N, M, K = map(int, input().split())
out = 0
mod = 998244353

c = 1

for k in range(K+1):
  out += M * pow(M-1, N-k-1, mod) * c
  out %= mod
  c *= (N-k-1) * pow(k+1, mod-2, mod)
  c %= mod
print(out)

Hier $ Y^{p-2} \mod p \equiv {1\over Y} $ (Eine Variante des Satzes von Fermat) wird verwendet, um die Berechnung von $ Y ^ {-1} $ zu beschleunigen.

Das ist alles für diesen Artikel.

Recommended Posts

Rückblick auf den AtCoder Beginner Contest 159 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 163 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 164 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 162 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 154 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 160 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 167 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 157 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 161 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 155 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 156 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 166 bis Frage E (Python)
Rückblick auf den AtCoder Beginner Contest 165 bis Frage E (Python)
atcoder Review des Panasonic Programming Contest 2020, bis zu Frage E (Python)
Überprüfung des Atcoders ABC158 bis Frage E (Python)
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 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 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 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 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
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 053 Rückblick auf frühere Fragen