Brechen Sie in anderthalb Minuten durch. Schreiben Sie einfach. Es hat viel Zeit in Anspruch genommen, da der Codetest nicht einfach ausgeführt werden konnte.
A, B = map(int, input().split())
print(A * B)
In 3 Minuten durchbrechen. Es ist ein Problem, dass sogar eine 64-Bit-Ganzzahl überläuft, aber es ist einfach, weil Sie in Python an nichts denken müssen. Vergessen Sie nicht, zu sortieren, um mit 0 zu beginnen. 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)
Es brach in 3 Minuten durch. In dem Moment, als ich A ≤ 10 15 sah, wurde mir klar, dass es doppelt war, und ich kam auf die Dezimalzahl (10 15 ist 10) > 3 </ sup> ≒ 2 10 </ sup> Also ungefähr ≒ 2 50 </ sup>, also liegt es nahe am unveränderlichen 52-Bit-Teil von double, und Sie können sehen, dass es eine Handlung ist, es zu überlaufen. .)
from decimal import Decimal
A, B = map(Decimal, input().split())
print(int(A * B))
Es brach in 22,5 Minuten durch, WA1. Ich dachte, ich würde das Eratostenes-Sieb vorerst aufkleben, aber ich konnte es nicht aufkleben, weil N ≤ 10 </ sup> 12 </ sup>, also begann ich damit, auf den Prozess bis sqrt (N) umzusteigen. Ich habe p e </ sup> in aufgezählt, und als ich es in der Reihenfolge des Schlagens aufteilte und den verbleibenden Wert verarbeitete, schlug ich fehl und bekam WA, aber vielleicht ist dieser Code auch eine Lüge. (Bleibt richtig) Scheint es, als müssten Sie überprüfen, ob es sich um eine Primzahl handelt?)
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)
Nachtrag: Ich könnte mit der zuvor geschriebenen Primfaktorisierungsfunktion schneller schreiben. Fehler.
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)
Ich konnte nicht durchbrechen. Ich habe über eine Stunde nachgedacht, aber je mehr ich darüber nachdenke, desto schwieriger wird es.
PS: Ich dachte, dass es während des Wettbewerbs einen möglichen Medianwert zwischen den Medianwerten von A i </ sub> und B i </ sub> gibt, aber ich bin sicher, dass dies alle sind. Ich konnte es nicht bekommen. Es war jedoch möglicherweise notwendig, darauf vorbereitet zu sein, es mit einer faulen Lesung auszuspucken. Mit Yukicoder werfe ich es hoihoi, weil es keine Pena gibt (lacht). X <sub Es heißt, wenn Sie> i </ sub> mit A i </ sub> beginnen und einen von ihnen um 1 erhöhen, erhöht sich der Medianwert nicht oder um 1 (oder 0,5, wenn er gerade ist). Ich kann verstehen, dass es wahr ist ...
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