Percer en une minute et demie. Il suffit d'écrire. Cela a pris beaucoup de temps car le test de code n'était pas exécuté facilement.
A, B = map(int, input().split())
print(A * B)
Percer en 3 minutes. C'est un problème que même les entiers 64 bits débordent, mais c'est facile car vous n'avez pas à penser à quoi que ce soit en Python. N'oubliez pas de trier pour commencer par 0 OK!
N = int(input())
A = list(map(int, input().split()))
limit = 10 ** 18
A.sort()
result = A[0]
for a in A[1:]:
result *= a
if result > limit:
print(-1)
exit()
print(result)
Il a percé en 3 minutes. Au moment où j'ai vu A ≤ 10 15 </ sup>, j'ai réalisé que c'était un double, alors je me suis échappé en décimal. (10 15 </ sup> est 10 > 3 </ sup> ≒ 2 10 </ sup> Donc, à peu près ≒ 2 50 </ sup>, il est donc proche de la partie immuable 52 bits de double, et vous pouvez voir que c'est un acte de le déborder. .)
from decimal import Decimal
A, B = map(Decimal, input().split())
print(int(A * B))
Il a percé en 22 minutes et demie, WA1. Je pensais que je collerais le tamis Eratostenes pour le moment, mais je ne pouvais pas le coller car N ≤ 10 12 </ sup>, alors j'ai commencé par passer au processus jusqu'à sqrt (N). J'ai énuméré p e </ sup> dans, et quand je l'ai divisé dans l'ordre du martèlement et traité la valeur restante, j'ai échoué et j'ai obtenu WA, mais peut-être que ce code est aussi une fausse solution. (Reste correctement) Vous semblez devoir vérifier si c'est un nombre premier?)
from math import sqrt
N = int(input())
rn = int(sqrt(N))
sieve = [0] * (rn + 1)
sieve[0] = -1
sieve[1] = -1
t = [0] * (rn + 1)
for i in range(2, rn + 1):
if sieve[i] != 0:
continue
sieve[i] = i
j = i
while j < rn + 1:
t[j] = 1
j *= i
for j in range(i * i, rn + 1, i):
if sieve[j] == 0:
sieve[j] = i
result = 0
last = -1
for i in range(2, rn + 1):
if t[i] == 0:
continue
if N % i == 0:
result += 1
N //= i
last = i
if N != 1 and N > rn:
result += 1
print(result)
Addendum: Je pourrais écrire plus rapidement en utilisant la fonction de factorisation prime que j'ai écrite plus tôt.
def prime_factorize(n):
result = []
if n % 2 == 0:
t = 0
while n % 2 == 0:
n //= 2
t += 1
result.append((2, t))
for i in range(3, int(n ** 0.5) + 1, 2):
if n % i != 0:
continue
t = 0
while n % i == 0:
n //= i
t += 1
result.append((i, t))
if n == 1:
break
if n != 1:
result.append((n, 1))
return result
N = int(input())
result = 0
for p, e in prime_factorize(N):
i = 1
while e >= i:
result += 1
e -= i
i += 1
print(result)
Je n'ai pas pu percer, j'ai réfléchi pendant plus d'une heure, mais plus j'y pense, plus c'est difficile.
PS: Je pensais qu'il y avait une valeur médiane possible entre les valeurs médianes de A i </ sub> et B i </ sub> pendant le concours, mais je suis sûr qu'elles le sont toutes. Je n'ai pas pu l'obtenir. Cependant, il a peut-être fallu être prêt à le cracher avec une lecture pourrie. Avec yukicoder, je le lance hoihoi car il n'y a pas de pena (rires). X <sub On dit que si vous démarrez> i </ sub> avec A i </ sub> et que vous augmentez l'un d'entre eux de 1, la valeur médiane n'augmentera pas ou augmentera de 1 (ou 0,5 si elle est paire). Je peux comprendre que c'est vrai ...
N = int(input())
A = [None] * N
B = [None] * N
for i in range(N):
a, b = map(int, input().split())
A[i] = a
B[i] = b
A.sort()
B.sort()
if N % 2 == 0:
b = (B[N // 2] + B[(N - 1) // 2]) / 2
a = (A[N // 2] + A[(N - 1) // 2]) / 2
print(int((b - a) * 2 + 1))
else:
print(B[N // 2] - A[N // 2] + 1)
Recommended Posts