Plötzlich war ich überrascht, 10 Minuten zu spät zu sein. Ich habe das Glück, dass ich die C- und D-Probleme gelöst habe. Nun, manchmal ist es gut, weil ich oft verwirrt bin, wenn ich das gelöste Problem verpasse.
Brechen Sie in zweieinhalb Minuten durch. Huhn, das die Schleife dreht, während es denkt, dass es mit * O * (1) geschrieben werden kann.
K = int(input())
A, B = map(int, input().split())
for i in range(A, B + 1):
if i % K == 0:
print('OK')
exit()
print('NG')
Nachtrag: Ich habe auch in * O * (1) geschrieben.
K = int(input())
A, B = map(int, input().split())
if (B // K) * K >= A:
print('OK')
else:
print('NG')
Es brach in 4 Minuten durch. Als ich X ≤ 10 </ sup> 18 </ sup> sah, dachte ich, dass TLE möglich ist, obwohl es ein B-Problem ist !? Mir ging es gut, also fragte ich mich, was es war.
X = int(input())
t = 100
result = 0
while t >= X:
t += t // 100
result += 1
print(result)
Es brach in 23,5 Minuten durch. In dem Moment, als ich das Problem sah, wurde mein Kopf weiß, aber ich schaffte es, es zu lösen. In dem Moment, als ich AC wurde, fand ich das aktuelle Ranking erstaunlich, aber jeder löste das D-Problem zuerst und sogar bis jetzt Ich habe nicht (lacht).
Nun, ich habe mich gefragt, ob ich ein Round-Robin machen soll, aber wenn ich es mit ungültigen generiere, scheint es mit * O * (10 10 </ sup>) nutzlos zu sein. Achten Sie auf 1 ≤ M ≤ 10. , M -1 ist 0-9, kann also als Zeichenkette ausgedrückt werden. Deshalb habe ich beschlossen, alle geeigneten Zeichenketten zu generieren. Danach dachte ich, ich würde ein Round-Robin-Verfahren durchführen. TLE, aber ohne AC ..
N, M, Q = map(int, input().split())
abcd = [list(map(int, input().split())) for _ in range(Q)]
m = M - 1
def f(s):
if len(s) == N:
return [s]
result = []
if s == '':
r = 0
else:
r = int(s[-1])
for i in range(r, m + 1):
result.extend(f(s + str(i)))
return result
result = 0
V = f('')
for s in V:
A = [int(c) + 1 for c in s]
t = 0
for a, b, c, d in abcd:
if A[b - 1] - A[a - 1] == c:
t += d
result = max(result, t)
print(result)
Nachtrag: Es scheint, dass ich nicht mein Bestes geben musste, um alle Sets selbst zu generieren. Python ist großartig.
from itertools import combinations_with_replacement
N, M, Q = map(int, input().split())
abcd = [list(map(int, input().split())) for _ in range(Q)]
result = 0
for A in combinations_with_replacement(range(1, M + 1), N):
t = 0
for a, b, c, d in abcd:
if A[b - 1] - A[a - 1] == c:
t += d
result = max(result, t)
print(result)
Durchbruch in 20 Minuten. Ich dachte, dass es zum Zeitpunkt des Anstiegs von Ax / B einen Maximalwert geben sollte. Wenn ich also die Gleichung von Ax / B = n löse, ist x = Bn / A, so dass x, das n um 1 erhöht, N ist Ich habe versucht, es zu drehen, bis es wurde. Dies ist jedoch der Fall, wenn A <B, also habe ich es für diesen Fall auf A gedreht. Als ich es mit einer unordentlichen Kombination herausbrachte, kam AC und ich war selbst überrascht. Mit anderen Worten, das Problem Ich habe nicht viel verstanden, aber ich habe es gelöst ...
In dem Moment, als ich das D-Problem löste, hatte ich einen Traum von blauer Leistung, weil ich in den 900ern war, aber es tut mir leid, dass ich das E-Problem nicht lösen konnte und mich auf den 1500. Platz zurückzog.
from math import floor
A, B, N = map(int, input().split())
def f(x):
return floor(A * x / B) - A * floor(x / B)
result = 0
for x in range(min(A + 1, N + 1)):
result = max(result, f(x))
if B > A:
for i in range(10 ** 20):
x = (i * B + A - 1) // A
if x > N:
break
result = max(result, f(x))
print(result)
Nachtrag: Früher habe ich gut durchgemacht (Schweiß). Die Schwierigkeitsgrade von D- und C-Problemen sind jedoch vollständig umgeschaltet.
A, B, N = map(int, input().split())
x = min(B - 1, N)
print(A * x // B - A * (x // B))
Verloren. Ich wusste, dass ich den Abstand auf 1, 2, ..., M einstellen sollte, aber ich konnte nicht herausfinden, wie ich die Kombinationen packen sollte, die ihn zwischen M erfüllen.
Nachtrag: Die Bedingung ist, dass der Unterschied zwischen a und b unterschiedlich ist, aber da er kreisförmig ist, kann er auch dann gleich sein, wenn der Unterschied unterschiedlich ist (zum Beispiel (1, 4), wenn N = 4). (2, 3) scheint sich um 3 Differenz und 1 Differenz zu unterscheiden, aber da 4 neben 1 steht, sind beide 1 Differenz). Zusammenfassend lässt sich sagen, dass der Abstand 1, 2, ..., M beträgt Gut. In diesem Fall ist es einzigartig, selbst wenn es aus dem Zustand von M × 2 + 1 ≤ N zirkuliert. Als nächstes, wie man die Kombination nimmt, nimm zuerst die längste 1 und M + 1. Natürlich darin Da derjenige mit dem Abstand M-1 nicht eintritt, nehmen Sie ihn mit M + 2 und 2M + 1 daneben. Da es sich um den Abstand M-2 handelt, tritt er zwischen 1 und M + 1 ein, also nehmen Sie ihn mit 2 und M. Als nächstes kommt der Abstand M-3, also denke ich, dass es in Ordnung ist, ihn bei M + 3 und 2M zu nehmen, also teile ihn in zwei Teile und packe sie wie eine Matroschka-Puppe hinein.
N, M = map(int, input().split())
for i in range(1, M + 1):
if i % 2 == 1:
j = (i - 1) // 2
print(1 + j, M + 1 - j)
else:
j = (i - 2) // 2
print(M + 2 + j, 2 * M + 1 - j)
Recommended Posts