結果
| 問題 |
No.97 最大の値を求めるくえり
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 21:20:38 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,794 bytes |
| コンパイル時間 | 274 ms |
| コンパイル使用メモリ | 82,472 KB |
| 実行使用メモリ | 105,160 KB |
| 最終ジャッジ日時 | 2025-06-12 21:21:30 |
| 合計ジャッジ時間 | 16,146 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 TLE * 1 -- * 1 |
ソースコード
import sys
MOD = 100003
def modinv(a, mod):
g, x, y = extended_gcd(a, mod)
if g != 1:
return None # Inverse doesn't exist if a and mod are not coprime
else:
return x % mod
def extended_gcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = extended_gcd(b % a, a)
return (g, x - (b // a) * y, y)
def generateA(N):
xor128_x = 123456789
xor128_y = 362436069
xor128_z = 521288629
xor128_w = 88675123
A = []
for _ in range(N):
t = xor128_x ^ (xor128_x << 11)
t = t & 0xFFFFFFFF # Ensure it's 32-bit
xor128_x = xor128_y
xor128_y = xor128_z
xor128_z = xor128_w
xor128_w = (xor128_w ^ (xor128_w >> 19)) ^ (t ^ (t >> 8))
a = xor128_w % MOD
A.append(a)
return A
def main():
input = sys.stdin.read().split()
ptr = 0
N = int(input[ptr])
ptr +=1
Q = int(input[ptr])
ptr +=1
queries = []
for _ in range(Q):
q = int(input[ptr])
queries.append(q)
ptr +=1
A = generateA(N)
present = [False] * MOD
for a in A:
present[a] = True
# Precompute modular inverses for all q in 1..MOD-1
inv = [0] * MOD
for q in range(1, MOD):
inv[q] = modinv(q, MOD)
# Precompute maximum a in A
max_a = max(A) if A else 0
for q in queries:
if q == 0:
print(0)
continue
q_inv = inv[q]
a_max = ((MOD -1) * q_inv) % MOD
if present[a_max]:
print(MOD -1)
else:
current_max = 0
for a in A:
val = (q * a) % MOD
if val > current_max:
current_max = val
print(current_max)
if __name__ == '__main__':
main()
gew1fw