[PYTHON] concours yukicoder 259 Record de participation

concours yukicoder 259 Record de participation

A 1139 Slime Race

C'était pareil même s'il n'y avait pas de collision parce que la vitesse a été prise en charge, en se disant "Il est très difficile de calculer le temps de collision dans l'ordre et de le traiter!". Il a été accroché et tué.

La réponse est que D est divisé par la vitesse totale et arrondi.

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!

Je ne pouvais pas le résoudre, je me demandais si le théorème de Fermat était impliqué, mais je ne pouvais pas penser à une conversion mathématique.

Addendum: A b c </ sup> </ sup> est A b × c </ sup> est une mathématique rudimentaire. Ici A P ! </ sup> est A P × (P-1) × (P-2)! </ Sup> = A P × (P-2)! × (P-1) </ sup > = A P × (P-2)! P-1 </ sup> </ sup>. D'après le théorème de Fermat, A P × (P-2) Si! </ Sup> est premier l'un à l'autre avec P, alors A P! </ Sup> = 1 (mod P). Au fait, P n'est pas un nombre composé mais un nombre premier, donc à la fin A et P sont premiers l'un à l'autre. Vous n'avez qu'à juger si c'est le cas.

Comme indiqué dans l'énoncé du problème, il s'agit de TLE en Python, le code suivant doit donc être soumis dans PyPy.

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')

Post-scriptum: Il était plus facile de comprendre s'il était réorganisé en A P-1 P × (P-2)! </ Su> </ sup>. 1 P × (P-2)! < / sup> ou 0 P × (P-2)! </ sup>, donc 1 ou 0 est un coup d'œil.

Postscript: j'ai également passé en Python.

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()

Grille de terrain C 1141

Après avoir écrit que cela peut être facilement résolu par le produit cumulatif, j'étais accro à ne pas penser à ce qui se passerait quand A i, j </ sub> était égal à 0.

Calculez le produit cumulé en excluant 0 pour tout, chaque ligne et chaque colonne. Remplissez la ligne r i </ sub> à partir du haut ou la colonne c i </ sub> à partir de la gauche. Mais s'il reste des 0, la réponse à cette requête est 0,0. S'il n'y a plus de 0, alors * O * (1) peut être utilisé pour calculer la réponse à la requête à l'aide du produit cumulatif précalculé.

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 contest 265 Record de participation
concours yukicoder 266 Record de participation
yukicoder contest 263 Record de participation
concours yukicoder 243 Record de participation
yukicoder contest 273 Record de participation
concours yukicoder 259 Record de participation
concours yukicoder 249 Record de participation
concours yukicoder 271 Record de participation
Concours yukicoder 251 Record de participation
yukicoder contest 242 Record de participation
concours yukicoder 241 Record de participation
yukicoder contest 257 Record de participation
Concours yukicoder 254 Record de participation
yukicoder contest 246 Record de participation
concours yukicoder 275 Record de participation
Concours yukicoder 274 Record de participation
concours yukicoder 247 Record de participation
yukicoder contest 261 Record de participation
yukicoder contest 248 Record de participation
yukicoder contest 270 (concours de mathématiques) Record de participation
yukicoder contest 272 (Weird math contest) Record de participation
record de 256 entrées
record de participation au concours 267 de yukicoder
record du concours 264 de yukicoder
yukicoder contest 245 record d'inscription
record de participation au concours yukicoder 250
record du concours 262
concours yukicoder 264 avis
concours yukicoder 261 avis
concours yukicoder 267 avis
concours yukicoder 266 avis
concours yukicoder 263 avis
yukicoder contest 268 avis
AtCoder Beginner Contest 181 Rapport de participation
AtCoder Beginner Contest 161 Rapport de participation
AtCoder Débutant Contest 176 Rapport de participation
AtCoder Beginner Contest 154 Rapport de participation
Note de participation au concours pour débutants AtCoder # 003
AtCoder Grand Contest 041 Rapport de participation
AtCoder Beginner Contest 166 Rapport de participation
AtCoder Grand Contest 040 Rapport de participation
AtCoder Beginner Contest 153 Rapport de participation
AtCoder Beginner Contest 145 Rapport de participation
AtCoder Débutant Contest 184 Rapport de participation
AtCoder Beginner Contest 165 Rapport de participation
Rapport de participation au concours AtCoder Débutant 160
AtCoder Beginner Contest 169 Rapport de participation
AtCoder Beginner Contest 178 Rapport de participation
AtCoder Beginner Contest 163 Rapport de participation
AtCoder Beginner Contest 159 Rapport de participation
AtCoder Beginner Contest 164 Rapport de participation
Rapport de participation au concours régulier AtCoder 105
AtCoder Beginner Contest 168 Rapport de participation
Rapport de participation au concours AtCoder Débutant 150
AtCoder Beginner Contest 158 Rapport de participation
Rapport de participation au concours AtCoder Débutant 180
AtCoder Regular Contest 104 Rapport de participation
AtCoder Beginner Contest 156 Rapport de participation
AtCoder Beginner Contest 162 Rapport de participation