結果
| 問題 |
No.551 夏休みの思い出(2)
|
| コンテスト | |
| ユーザー |
nisesansuu
|
| 提出日時 | 2017-09-14 13:39:33 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
MLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,806 bytes |
| コンパイル時間 | 91 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 821,176 KB |
| 最終ジャッジ日時 | 2024-11-07 19:48:23 |
| 合計ジャッジ時間 | 10,114 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 2 |
| other | AC * 27 MLE * 1 -- * 19 |
ソースコード
class ModP:
def __init__(self,p,r):
self.p = p
self.r = r
self.log = {}
self.exp = {}
self.log[0] = -1
self.exp[-1] = 0
x = 1
for i in range(p-1):
self.log[x] = i
self.exp[i] = x
x = (x*r)%p
def multi(self,a,b):
if a==-1 or b==-1:
return -1
else:
return (a+b)%(self.p-1)
def rec(self,a):
return (-a)%(self.p-1)
def plus(self,a,b):
if a==-1:
return b
elif b==-1:
return a
else:
return self.log[(self.exp[a]+self.exp[b])%self.p]
def opp(self,a):
if a==-1:
return -1
else:
return self.log[self.p-self.exp[a]]
def sqrt(self,a):
if a==-1:
return -1
elif a%2==1:
return -2
else:
return a/2
def solve(self,a,b,c):
a,b,c = self.log[a],self.log[b],self.log[c]
y = self.sqrt(self.plus(self.multi(b,b),self.opp(self.multi(self.log[4%self.p],self.multi(a,c)))))
if y==-2:
return -1
elif y==-1:
return self.exp[self.multi(self.opp(b),self.rec(self.multi(self.log[2],a)))]
else:
x = self.exp[self.multi(self.plus(self.opp(b),y),self.rec(self.multi(self.log[2],a)))]
y = self.exp[self.multi(self.opp(self.plus(b,y)),self.rec(self.multi(self.log[2],a)))]
if x>y: x,y = y,x
return "%d %d"%(x,y)
def main():
P,R = list(map(int,input().split()))
pclass = ModP(P,R)
Q = int(input())
for i in range(Q):
a,b,c = list(map(int,input().split()))
print(pclass.solve(a,b,c))
if __name__ == '__main__':
main()
nisesansuu