結果
問題 | No.551 夏休みの思い出(2) |
ユーザー |
![]() |
提出日時 | 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()