結果
| 問題 |
No.187 中華風 (Hard)
|
| コンテスト | |
| ユーザー |
akasia_midori
|
| 提出日時 | 2023-11-23 02:04:52 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,276 bytes |
| コンパイル時間 | 186 ms |
| コンパイル使用メモリ | 82,064 KB |
| 実行使用メモリ | 77,476 KB |
| 最終ジャッジ日時 | 2024-09-26 07:50:27 |
| 合計ジャッジ時間 | 10,299 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 WA * 2 |
ソースコード
def factorization(n):
arr = []
temp = n
for i in range(2, int(-(-n**0.5//1))+1):
if temp%i==0:
cnt=0
while temp%i==0:
cnt+=1
temp //= i
arr.append((i, cnt))
if temp!=1:
arr.append((temp, 1))
if arr==[]:
arr.append((n, 1))
return arr
import math
def pre_garner(amari, waru):
for i in range(len(amari)):
for j in range(i):
g = math.gcd(waru[i], waru[j])
if (amari[i] - amari[j])%g!=0:
return None, None
new_waru = [1] * len(waru)
dicts = {}
num_dict = {}
# 各素数を指数が最大のとこに割りふる
for i, wa in enumerate(waru):
for p,beki in factorization(wa):
if p in dicts:
# 保存されてるpの最大の指数より大きかったらその時のindexとp^bekiを保存
if dicts[p] < beki:
dicts[p] = beki
num_dict[p] = (i, pow(p,beki))
else:
dicts[p] = beki
num_dict[p] = (i, pow(p,beki))
for (i, num) in num_dict.values():
new_waru[i] *= num
# 余りを更新する
for i in range(len(amari)):
amari[i] %= new_waru[i]
return amari, new_waru
def GANER_ALGORYTHM(amari, waru, MOD=10**9+7):
waru.append(MOD)
coeff = [1] * len(waru)
constant = [0] * len(waru)
for i in range(len(amari)):
t = (((amari[i] - constant[i])% waru[i]) * pow(coeff[i], -1, waru[i])) % waru[i]
for j in range(len(waru)):
constant[j] = (constant[j] + t*coeff[j])%waru[j]
coeff[j] = (coeff[j]*waru[i]) % waru[j]
return constant
def oi(): return int(input())
def os(): return input()
def mi(): return list(map(int, input().split()))
# import sys
# input = sys.stdin.readline
# import sys
# sys.setrecursionlimit(10**8)
# import pypyjit
# pypyjit.set_param('max_unroll_recursion=-1')
# input_count = 0
input_count = 0
N = oi()
amari = []
wari = []
for _ in range(N):
x,y = mi()
wari.append(y)
amari.append(x)
amari, wari = pre_garner(amari, wari)
if amari is None:
print(-1)
else:
out = GANER_ALGORYTHM(amari, wari)
print(out[-1])
akasia_midori