Dies ist ein Übersichtsartikel für Anfänger von Wettkampfprofis.
Die Lösung, die ich hier schreibe, wurde geschrieben, während ich mir den Kommentar und die Beiträge anderer Leute ansah. Es ist möglicherweise nicht das, was Sie tatsächlich eingereicht haben.
A - The Number of Even Pairs Die Frage ist, die Anzahl der Kombinationen von N Bällen mit geraden Zahlen und M Bällen mit ungeraden Zahlen zu beantworten, für die die Summe gerade ist.
Die Antwort besteht einfach darin, die gerade Kombination $ N (N-1) / 2 $ und die ungerade Kombination $ M (M-1) / 2 $ zu kombinieren.
N, M = map(int, input().split())
print((N*(N-1))//2 + (M*(M-1))//2)
B - String Palindrome
Es ist ein Problem zu beurteilen, ob die angegebene Zeichenfolge ein "Kreissatz ist, der zwei Kreissätze kombiniert".
s = input()
n = len(s)
for i in range((n-1+3)//4):# +3 dient zum Aufrunden
if not(s[i] == s[(n-1)//2-i-1] and s[(n+3)//2 + i-1] == s[-i-1] and s[i] == s[-i-1]):
print('No')
exit()
print('Yes')
Wenn ich mir andere Antworten und Erklärungen ansah, gab es eine sauberere Art zu schreiben.
s = input()
n = len(s)
sl = s[:n//2]
sr = s[n//2+1:]
if sl == sr and sr == sr[::-1]:
print('Yes')
else:
print('No')
Teilen Sie die Zeichenkette in links und rechts, und wenn die rechte Seite `sr``` eine Rezitation ist, ist das entsprechende` `sl``` auch eine Rezitation. Da
sl``` und
`` sr``` der gleiche Umstand sind, ist es ein Umstand, selbst wenn beide kombiniert werden. Es waren nur zwei Bedingungen erforderlich.
C - Maximum Volume Die Gesamthöhe, -breite und -höhe ist das Problem der Beantwortung des maximalen Volumens eines L-Quadrats.
Wenn height = width = height ist, ist das Volumen maximal, sodass die Länge von jedem $ L / 3 $ beträgt. Würfeln Sie einfach.
L = int(input())
print((L/3)**3)
Ich konnte nicht erklären, warum es das Maximum ist, wenn die Längen der Seiten übereinstimmen, deshalb werde ich vorerst eine mathematische Erklärung schreiben.
Das Folgende ist die Formel für den additiven synergistischen Durchschnitt mit drei Variablen.
D - Banned K
Es ist ein Problem, darüber nachzudenken, wie viele Kombinationen dieselbe Zahl aus N Bällen mit darauf geschriebenen Zahlen auswählen sollen, mit Ausnahme der Bälle.
Ermitteln Sie zunächst die Gesamtzahl der Kombinationen $ S $ aus allen Bällen. Wenn von dort aus $ m $ Bälle mit der Zahl $ n $ vorhanden sind und Sie einen Ball mit der Zahl $ n $ herausnehmen, wird der Gesamtbetrag von $ S $ um $ m-1 $ reduziert. Die Zahl $ n $ wird auf jeden Ball angewendet, der herausgenommen und ausgegeben werden soll.
import collections
N = int(input())
li = list(map(int, input().split()))
cn = collections.Counter(li)
sumC = sum([n*(n-1)//2 for n in cn.values()])
for k in range(N):
print(sumC-cn[li[k]] + 1)
E - Dividing Chocolate
Es ist eine Frage, wie oft geteilt werden muss, damit die Menge an weißer Schokolade in der Tellerschokolade unter einem bestimmten Wert liegt.
Ich gab auf, weil ich weder "die Idee der Erforschung" noch "wie man die Anzahl der weißen Pralinen in der Spaltung zählt" verstand.
Ich habe den Kommentar gesehen. Da es eine enge Bereichsspezifikation von $ H \ leq 10 $ gibt, kann die horizontale Unterteilung einfach sein, um alle $ 2 ^ {H-1} $ Straßen zu durchsuchen. Verwenden Sie "itertools.product ()" für eine vollständige Suche, um ein vollständiges Array der Länge H-1 mit 0s oder 1 zu erstellen. Die Suche ist damit in Ordnung.
Horizontal geteilte Pralinen werden in dem zweidimensionalen Array "SW" als eindimensionales Array gespeichert, das die Anzahl der weißen Pralinen vertikal zählt und von links gezählt wird. Wenn die Anzahl der Pralinen in einer Spalte die angegebene Anzahl "K" überschreitet, teilen Sie die Pralinen vertikal und setzen Sie die Anzahl auf 0 zurück. Damit können Sie auch Schokolade zählen. Wenn jedoch der Wert des eindimensionalen Arrays "K" überschreitet, ist es unmöglich, die Schokolade viele Male zu teilen, so dass die Situation von der Seitwärtsteilung wiederholt werden sollte.
Der Code sieht also so aus:
import itertools
H, W, K = map(int, input().split())
S = [input() for _ in range(H)]
ans = 1e4
for t in itertools.product([0, 1], repeat=H-1):
cnt = t.count(1)
SW = []
tmp = [int(s) for s in S[0]]
for i, c in enumerate(t):
if c:
SW.append(tmp)
tmp = [int(s) for s in S[i+1]]
else:
tmp = [tmp[j] + int(S[i+1][j]) for j in range(W)]
SW.append(tmp)
H_ = len(SW)
sums = [0] * H_
if max(itertools.chain.from_iterable(SW)) > K:
continue
for w in range(W):
sumtmp = [sums[i] + SW[i][w] for i in range(H_)]
if max(sumtmp) > K:
cnt += 1
sums = [SW[i][w] for i in range(H_)]
else:
sums = sumtmp
ans = min(ans, cnt)
print(ans)
Dieser Artikel endet vorerst mit Frage E.
Recommended Posts