結果
| 問題 | No.2183 LCA on Rational Tree |
| ユーザー |
shobonvip
|
| 提出日時 | 2023-01-07 20:06:10 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 956 bytes |
| 記録 | |
| コンパイル時間 | 301 ms |
| コンパイル使用メモリ | 82,408 KB |
| 実行使用メモリ | 612,548 KB |
| 最終ジャッジ日時 | 2024-12-15 04:40:22 |
| 合計ジャッジ時間 | 14,117 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 TLE * 3 MLE * 2 |
ソースコード
from math import gcd
def pfact(m):
pf = {}
for i in range(2,int(m**0.5)+1):
while m%i == 0:
pf[i] = pf.get(i,0) + 1
m //= i
if m>1 : pf[m]=1
return pf
def gogo(p:int, q:int, lst:list):
pf = pfact(q-p)
while q-p > 1:
x = 10 ** 18
for i,c in pf.items():
x = min(x, i-(p%i))
g = gcd(p+x, q+x)
lst.append((q-p, p, p+x))
p, q = (p+x)//g, (q+x)//g
newqp = q-p
for i in pf.keys():
pf[i] = 0
while newqp % i == 0:
pf[i] += 1
newqp //= i
#print(f"{x} 回操作して, {p}/{q}")
lst.append((1, p, 9 * 10 ** 18))
Q = int(input())
for _ in range(Q):
lst1 = []
lst2 = []
p1,q1,p2,q2 = map(int,input().split())
gogo(p1,q1,lst1)
gogo(p2,q2,lst2)
g = dict()
for i, st, ed in lst1:
g[i] = (st, ed)
ans1 = 0
ans2 = 0
#print(g)
for i, st, ed in lst2:
if i in g.keys():
v = max(0, min(ed, g[i][1]) - max(st, g[i][0]))
if v > 0:
ans1 = max(st, g[i][0])
ans2 = i + ans1
break
print(ans1, ans2)
shobonvip