Rückblick auf den AtCoder Beginner Contest 165 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 - We Love Golf

Es ist eine Frage zu beantworten, ob K im Bereich von A oder mehr und B oder weniger enthalten ist.

Aus der Einschränkung von $ 1 \ leq A \ leq B \ leq 1000 $, $ 1 \ leq K \ leq 1000 $ ergibt sich kein Problem, wenn Sie einfach nach einem Wert suchen, der die Bedingung im Bereich von $ A $ bis $ B $ erfüllt. ..

N = int(input())
A, B = map(int, input().split())
for i in range(A, B+1):
  if i % N == 0:
    print('OK')
    break
else:
  print('NG')

B - 1%

Wenn die eingezahlten 100 Yen einen jährlichen Zinssatz von 1% haben, ist es eine Frage, wie viele Jahre später der angegebene Betrag von X Yen überschritten wird.

Beträge unterhalb des Dezimalpunkts werden abgeschnitten. Beantwortete die Häufigkeit, mit der "while" gedreht wurde, bis der angegebene Betrag überschritten wurde.

X = int(input())
n = 100
count = 0
while n < X:
  count += 1
  n = int(n * 1.01)
print(count) 

C - Many Requirements

Für die Eingabe von $ a, b, c, d $ erhalten Sie $ d $ Punkte, wenn $ A_b --A_a = c $. Wenn Sie eine Folge von Zahlen $ \ boldsymbol {A} $ erstellen können, müssen Sie die maximale Gesamtpunktzahl beantworten.

Es sieht nach einem verwirrenden Problem aus ... aber die Länge der Sequenz $ N $, das Maximum $ M $, ist $ 1 \ leq N \ leq 10, 1 \ leq M \ leq 10 $, wenn $ a, b gegeben ist Die Anzahl von, c, d $ $ Q $ wird auch als $ 1 \ leq Q \ leq 50 $ angegeben. Ich dachte, das wäre ein Kreisverkehr.

Ich habe "itertools.combinations_with_replacement ()" für Round-Robin verwendet. Beachten Sie, dass die Zahlenspalte $ A $ einen festen sortierten Wert hat, jedoch doppelte Werte möglich sind.

import itertools

N, M, Q = map(int, input().split())
abcd = [tuple(map(int, input().split())) for _ in range(Q)]

Max = 0
for C in itertools.combinations_with_replacement(range(1, M + 1), N):
  score = sum([d for a, b, c, d in abcd if C[b-1] - C[a-1] == c])
  Max = max(Max, score)
print(Max)

Nachtrag

Ist das wirklich eine Nummer, die gedrückt werden kann? $ O (M ^ N Q) $, richtig? Ich war besorgt und versuchte zu rechnen.

import itertools

print(len(list(itertools.combinations_with_replacement(range(1, 11), 10))))
# 92378

Es scheint, dass Sie gehen können. Mit Blick auf den Kommentar war diese vollständige Suche für mich allein schwierig. Es lebe Python. Es lebe die Bibliothek.

D - Floor Function

floor (Ax/B)-A\times floor (x/B)

Ist das Problem, $ x $ zu finden, was der Maximalwert ist.

Abgesehen vom mathematischen Beweis fragte ich mich, ob ich den Maximalwert von $ x $ so finden sollte, dass $ floor (x / B) = 0 $ ist. Die Bedingung wird von dem größten $ B-1 $ unter $ N $ erfüllt, dh dem kleineren von $ B-1 $ oder $ N $.

Deshalb habe ich folgendes geschrieben.

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

x = min(B-1, N)
print(A*x // B - A * (x//B))

Mathematische Erklärung

Ich habe die mathematische Erklärung nicht verstanden, deshalb werde ich die Erklärung lesen.

f(x) = floor (Ax/B)-A\times floor (x/B)

Und sag es. Wenn der Wert von $ x $ in dieser Formel um $ B $ erhöht wird, wird der erste Term auf der rechten Seite immer um $ A $ erhöht. Der zweite Term wird immer um $ A $ reduziert. Dies wird abgebrochen und die Summe ändert sich nicht. Mit anderen Worten gilt die folgende Formel.

f(x) = f(x+B)

Sie müssen also nicht über den Bereich von $ B \ leq x $ nachdenken. Finden Sie den Maximalwert im Bereich von $ 0 \ leq x <B $, $ 0 \ leq x \ leq N $.

In diesem Bereich ist der Wert des zweiten Terms, der ursprünglich negativ ist, immer 0, daher sollte der Wert des ersten Terms, der eine monotone Zunahme darstellt, innerhalb des Bereichs maximiert werden. Das heißt, maximieren Sie $ x $ innerhalb des Bereichs.

Ich verwende den zweiten Begriff nicht, daher können Sie ihn wie folgt schreiben.

A, B, N = map(int, input().split())
print(A * min(B-1, N) // B)

E - Rotation Matching

Es ist ein Problem, darüber nachzudenken, wie man eine Kombination nimmt, bei der sich die Gegner nicht überschneiden, wenn $ N $ Teilnehmer gleichzeitig 1vs1 Stein-Papier-Schere für $ M $ Spiele und $ N $ Zeiten spielen.

Die Problemstellung ist äußerst kompliziert. Was fragst du?

Angenommen, $ N = 9 $ Personen haben an diesem Turnier teilgenommen. Es wird 9 Sätze von Übereinstimmungen geben. Von hier aus setzen wir $ M = 3 $ und machen drei Paare.

Wählen Sie ein Paar von 1 oder 2, wie Sie möchten.

rapture_20200502235544.jpg

Selbst wenn Sie in diesem Zustand 9 Mal drehen, werden keine Gegner dupliziert.

Als nächstes nehmen wir 3, 5 Paare.

rapture_20200502235807.jpg

Dies führt nicht zu Duplikaten.

Als nächstes nehmen wir ein Paar 6 und 7.

rapture_20200503000040.jpg

Dies führt zu Duplikaten. Ein Paar von 1 und 2 Schichten und ein Paar von 6 und 7 Schichten nehmen das gleiche auf dem Weg.

Wie kann ich das beheben? Es wurde um eins oder zwei verschoben, also verschieben wir es diesmal um drei.

rapture_20200503000245.jpg

Diesmal gibt es keine Vervielfältigung. Das Problem ist, ein solches Paar zu machen.

Mit anderen Worten kann dieses Problem wie folgt umformuliert werden.

"$ M $ Paare von ($ A_i, B_i $) mit $ B_i - A_i = 1, 2, 3, ..., M $ ausgeben, ohne dass Werte dupliziert werden."

Sie haben keine anständige Suche durchgeführt, um dies zu lösen. (TLE ist herausgekommen.) Die Form wird von Anfang an festgelegt und platziert.

rapture_20200503000930.jpg

Deshalb habe ich es wie folgt implementiert.

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

halfPos = -(-N//2)
qPos = halfPos // 2
q3Pos = qPos + halfPos

for m in range(1, M+1):
  if m % 2:
    print(qPos-m//2, qPos+m//2+1)
  else:
    print(q3Pos-m//2, q3Pos+m//2)

Dieser Artikel endet hier. Dies ist das erste Mal, dass ich es in der Produktion mit ABCDE gelöst habe.

Recommended Posts

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 153 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)
AtCoder Beginner Contest 102 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 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 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 047 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 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 083 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 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
AtCoder Beginner Contest 094 Rückblick auf frühere Fragen
AtCoder Beginner Contest 063 Rückblick auf frühere Fragen
AtCoder Beginner Contest 107 Rückblick auf frühere Fragen
AtCoder Anfängerwettbewerb: D Problemantworten Python
AtCoder Beginner Contest 071 Rückblick auf frühere Fragen
AtCoder Beginner Contest 064 Rückblick auf frühere Fragen