Du coup, j'ai été surpris d'avoir 10 minutes de retard. J'ai de la chance d'avoir résolu les problèmes C et D. Eh bien, c'est bien parfois parce que je suis souvent confus si je rate le problème résolu.
Pause en deux minutes et demie Poulet qui tourne la boucle en pensant qu'on peut l'écrire avec * O * (1).
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')
Post-scriptum: J'ai également écrit en * O * (1).
K = int(input())
A, B = map(int, input().split())
if (B // K) * K >= A:
print('OK')
else:
print('NG')
Percer en 4 minutes. Quand j'ai vu X ≤ 10 18 </ sup>, j'ai pensé que TLE était possible même s'il s'agissait d'un problème B!? J'allais bien, alors je me demandais ce que c'était.
X = int(input())
t = 100
result = 0
while t >= X:
t += t // 100
result += 1
print(result)
Il a éclaté en 23 minutes et demie. Au moment où j'ai vu le problème, ma tête est devenue blanche, mais j'ai réussi à le résoudre. Au moment où j'ai AC, j'ai pensé que le classement actuel était incroyable, mais tout le monde a résolu le problème D en premier et même jusqu'à présent Je ne l'ai pas fait (rires).
Eh bien, je me demandais si je devais faire un round-robin, mais si je le génère avec des invalides, cela semble inutile avec * O * (10 10 </ sup>). Faites attention à 1 ≤ M ≤ 10. , M -1 vaut 0-9, donc il peut être exprimé sous forme de chaîne de caractères, j'ai donc décidé de générer tous les jeux de chaînes de caractères appropriés. Après cela, j'ai pensé que je ferais un round robin. TLE, mais sans 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)
Postscript: Il semble que je n'ai pas eu à faire de mon mieux pour générer moi-même tous les ensembles, Python est génial.
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)
Percer dans 20 minutes. Je pensais qu'il devrait y avoir une valeur maximale au moment où Ax / B augmente, donc quand je résous l'équation de Ax / B = n, x = Bn / A, donc x qui incrémente n de 1 est N J'ai essayé de le tourner jusqu'à ce qu'il devienne. Cependant, c'était quand A <B, alors je l'ai tourné vers A pour ce cas. Quand je l'ai éteint avec une combinaison désordonnée, AC est venu et j'ai été surpris moi-même. En d'autres termes, le problème Je n'ai pas beaucoup compris, mais je l'ai résolu ...
Au moment où j'ai résolu le problème D, j'ai rêvé de performances bleues parce que j'étais dans les 900, mais je suis désolé de ne pas avoir pu résoudre le problème E et je me suis replié à la 1500e place.
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)
Post-scriptum: J'avais l'habitude de bien traverser (transpiration), mais les niveaux de difficulté des problèmes D et C sont complètement inversés.
A, B, N = map(int, input().split())
x = min(B - 1, N)
print(A * x // B - A * (x // B))
Perdu. Je savais que je devais régler la distance à 1, 2, ..., M, mais je ne savais pas comment emballer les combinaisons qui le satisfassent entre M.
Addendum: La condition est que la différence entre a et b soit différente, mais comme elle est circulaire, elle peut être la même même si la différence est différente (par exemple, (1, 4) quand N = 4). (2, 3) semble être différent de 3 différences et 1 différence, mais comme 4 est à côté de 1, les deux sont 1 différence.) En conclusion, si la distance est 1, 2, ..., M Bien. Dans ce cas, il sera unique même s'il circule à partir de la condition M × 2 + 1 ≤ N. Ensuite, comment prendre la combinaison, prenez d'abord le plus long 1 et M + 1. Bien sûr, à l'intérieur Puisque celui avec la distance M-1 n'entre pas, prenez-le avec M + 2 et 2M + 1 à côté. Ensuite, comme c'est la distance M-2, il entre entre 1 et M + 1, alors prenez-le avec 2 et M. Vient ensuite la distance M-3, donc je pense que c'est correct de la prendre à M + 3 et 2M, alors divisez-la en deux parties et emballez-les à l'intérieur comme une poupée Matriochka.
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