[PYTHON] Yukicoder-Wettbewerb 259 Teilnehmerrekord

Yukicoder-Wettbewerb 259 Teilnehmerrekord

A 1139 Slime Race

Es war das gleiche, auch wenn es keine Kollision gab, weil die Geschwindigkeit übernommen wurde und dachte: "Es ist sehr schwierig, die Kollisionszeit in der richtigen Reihenfolge zu berechnen und zu verarbeiten!". Sie wurde eingehakt und getötet.

Die Antwort ist, dass D durch die Gesamtgeschwindigkeit geteilt und aufgerundet wird.

N, D = map(int, input().split())
x = list(map(int, input().split()))
v = list(map(int, input().split()))

t = sum(v)
print((D + t - 1) // t)

B 1140 EXPotentiaLLL!

Ich konnte es nicht lösen. Ich fragte mich, ob Fermats Theorem involviert war, aber ich konnte mir keine mathematische Umrechnung vorstellen.

Nachtrag: A b c </ sup> </ sup> ist A b × c </ sup> ist eine rudimentäre Mathematik. Hier ist A P. ! </ sup> ist A P × (P-1) × (P-2)! </ Sup> = A P × (P-2)! × (P-1) </ sup > = A

P × (P-2)! P-1 </ sup> </ sup>. Nach dem Satz von Fermat ist A

P × (P-2) Wenn! </ Sup> mit P primiert ist, dann ist A P! </ Sup> = 1 (mod P). Sie müssen nur beurteilen, ob es ist.

Wie in der Problembeschreibung angegeben, handelt es sich in Python um TLE. Daher muss der folgende Code in PyPy übermittelt werden.

def make_prime_table(n):
    sieve = list(range(n + 1))
    sieve[0] = -1
    sieve[1] = -1
    for i in range(2, int(n ** 0.5) + 1):
        if sieve[i] != i:
            continue
        for j in range(i * i, n + 1, i):
            if sieve[j] == j:
                sieve[j] = i
    return sieve


readline = open(0).readline

prime_table = make_prime_table(5 * 10 ** 6)

T = int(readline())
result = []
for _ in range(T):
    A, P = map(int, readline().split())
    if prime_table[P] != P:
        result.append(-1)
    else:
        if A % P == 0:
            result.append(0)
        else:
            result.append(1)
print(*result, sep='\n')

Nachtrag: Es war leichter zu verstehen, ob es in A P-1 P × (P-2) umgeordnet wurde! </ Su> </ sup>. 1 P × (P-2)! < / sup> oder 0 P × (P-2)! </ sup>, also ist 1 oder 0 ein Blick.

Nachtrag: Ich habe auch Python bestanden.

def make_prime_table(n):
    sieve = [True] * (n + 1)
    sieve[0] = False
    sieve[1] = False
    for i in range(2, int(n ** 0.5) + 1):
        if not sieve[i]:
            continue
        for j in range(i * i, n + 1, i):
            sieve[j] = False
    return sieve


def main():
    readline = open(0).readline

    prime_table = make_prime_table(5 * 10 ** 6)

    T = int(readline())
    result = []
    for _ in range(T):
        A, P = map(int, readline().split())
        if not prime_table[P]:
            result.append(-1)
        else:
            if A % P == 0:
                result.append(0)
            else:
                result.append(1)
    print(*result, sep='\n')


main()

C 1141 Field Grid

Nachdem ich geschrieben hatte, dass es durch das kumulative Produkt leicht gelöst werden kann, war ich süchtig danach, nicht darüber nachzudenken, was passieren würde, wenn A i, j </ sub> 0 wäre.

Berechnen Sie das kumulative Produkt ohne 0 für alle, jede Zeile und jede Spalte. Füllen Sie die Zeile r i </ sub> von oben oder die Spalte c i </ sub> von links aus. Wenn jedoch noch Nullen übrig sind, lautet die Antwort auf diese Abfrage 0.0 Wenn keine Nullen mehr vorhanden sind, kann * O * (1) verwendet werden, um die Antwort auf die Abfrage unter Verwendung des vorberechneten kumulativen Produkts zu berechnen.

readline = open(0).readline

H, W = map(int, readline().split())
A = [list(map(int, readline().split())) for _ in range(H)]
Q = int(readline())

m = 1000000007

total = 1
rows = [1] * H
cols = [1] * W
total0 = 0
rows0 = [0] * H
cols0 = [0] * W
for i in range(H):
    for j in range(W):
        x = A[i][j]
        if x == 0:
            total0 += 1
            rows0[i] += 1
            cols0[j] += 1
        else:
            total *= x
            total %= m
            rows[i] *= x
            rows[i] %= m
            cols[j] *= x
            cols[j] %= m

result = []
for _ in range(Q):
    r, c = map(lambda x: int(x) - 1, readline().split())
    x = A[r][c]
    t = total0 - rows0[r] - cols0[c]
    if x == 0:
        t += 1
    if t > 0:
        result.append(0)
        continue
    t = total * pow(rows[r], -1, m) % m * pow(cols[c], -1, m) % m
    if x != 0:
        t *= x
        t %= m
    result.append(t)
print(*result, sep='\n')

Recommended Posts

Yukicoder-Wettbewerb 265 Teilnehmerrekord
Yukicoder-Wettbewerb 266 Teilnehmerrekord
Yukicoder-Wettbewerb 263 Teilnehmerrekord
Yukicoder-Wettbewerb 243 Teilnehmerrekord
Yukicoder-Wettbewerb 273 Teilnehmerrekord
Yukicoder-Wettbewerb 259 Teilnehmerrekord
Yukicoder-Wettbewerb 249 Teilnehmerrekord
Yukicoder-Wettbewerb 271 Teilnehmerrekord
Yukicoder-Wettbewerb 251 Teilnehmerrekord
Yukicoder-Wettbewerb 241 Teilnehmerrekord
Yukicoder-Wettbewerb 257 Teilnehmerrekord
Yukicoder-Wettbewerb 254 Teilnehmerrekord
Yukicoder-Wettbewerb 246 Teilnehmerrekord
Yukicoder-Wettbewerb 275 Teilnehmerrekord
Yukicoder-Wettbewerb 274 Teilnehmerrekord
Yukicoder-Wettbewerb 247 Teilnehmerrekord
Yukicoder-Wettbewerb 261 Teilnehmerrekord
Yukicoder-Wettbewerb 248 Teilnehmerrekord
Yukicoder-Wettbewerb 270 (Mathematik-Wettbewerb) Teilnahmeprotokoll
Yukicoder-Wettbewerb 272 (Weird Math Contest) Teilnahmeprotokoll
Yukicoder-Wettbewerb 256 Eintragungsrekord
Yukicoder-Wettbewerb 267 Eintragungsrekord
Yukicoder-Wettbewerb 264 Eintragungsrekord
Yukicoder-Wettbewerb 245 Eintragungsrekord
Yukicoder-Wettbewerb 250 Eintragungsrekord
Yukicoder-Wettbewerb 262 Eintragungsrekord
Yukicoder-Wettbewerb 264 Bewertung
Yukicoder-Wettbewerb 261 Bewertung
Yukicoder-Wettbewerb 267 Bewertung
Yukicoder-Wettbewerb 266 Bewertung
Yukicoder-Wettbewerb 263 Bewertung
Yukicoder-Wettbewerb 268 Bewertung
AtCoder Beginner Contest 181 Teilnahmebericht
AtCoder Beginner Contest 161 Teilnahmebericht
AtCoder Beginner Contest 176 Teilnahmebericht
AtCoder Beginner Contest 154 Teilnahmebericht
AtCoder Beginner Contest # 003 Teilnahmehinweis
AtCoder Grand Contest 041 Teilnahmebericht
AtCoder Beginner Contest 166 Teilnahmebericht
AtCoder Grand Contest 040 Teilnahmebericht
AtCoder Beginner Contest 153 Teilnahmebericht
AtCoder Beginner Contest 145 Teilnahmebericht
AtCoder Beginner Contest 184 Teilnahmebericht
AtCoder Beginner Contest 165 Teilnahmebericht
AtCoder Beginner Contest 160 Teilnahmebericht
AtCoder Beginner Contest 169 Teilnahmebericht
AtCoder Beginner Contest 178 Teilnahmebericht
AtCoder Beginner Contest 163 Teilnahmebericht
AtCoder Beginner Contest 159 Teilnahmebericht
AtCoder Beginner Contest 164 Teilnahmebericht
AtCoder Regular Contest 105 Teilnahmebericht
AtCoder Beginner Contest 168 Teilnahmebericht
AtCoder Beginner Contest 150 Teilnahmebericht
AtCoder Beginner Contest 158 Teilnahmebericht
AtCoder Beginner Contest 180 Teilnahmebericht
AtCoder Regular Contest 104 Teilnahmebericht
AtCoder Beginner Contest 156 Teilnahmebericht
AtCoder Beginner Contest 162 Teilnahmebericht