結果

問題 No.3396 ChRisTmas memory
コンテスト
ユーザー 👑 p-adic
提出日時 2025-12-03 11:09:48
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
TLE  
実行時間 -
コード長 985 bytes
コンパイル時間 402 ms
コンパイル使用メモリ 12,416 KB
実行使用メモリ 18,728 KB
最終ジャッジ日時 2025-12-03 11:09:57
合計ジャッジ時間 8,613 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 10 TLE * 1 -- * 29
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.py:8: SyntaxWarning: invalid decimal literal
  a=-1if s%g!=t%g else(s%g+t//g*p*u+s//g*q*v)%(p*q//g)
Main.py:33: SyntaxWarning: invalid decimal literal
  return -1if self.len else self.ans

ソースコード

diff #
raw source code

def PartitionOfUnity(p,q):
	if q==0:return abs(p),1-2*(p<0),q
	g,c,d=PartitionOfUnity(q,p%q)
	return g,d,c-p//q*d

def ChineseRemainderTheorem(p,s,q,t):
	g,u,v=PartitionOfUnity(p,q)
	a=-1if s%g!=t%g else(s%g+t//g*p*u+s//g*q*v)%(p*q//g)
	return g,a

class DynamicChineseRemiderTheorem:
	def __init__(self):
		self.mod=1
		self.ans=0
		self.div=[]
		self.len=0

	def append(self,base,res):
		assert base
		if self.len:self.len+=1;return
		g,a=ChineseRemainderTheorem(self.mod,self.ans,base,res)
		if a<0:self.len=1;return
		self.div+=[base//g]
		self.mod,self.ans=self.mod*self.div[-1],a

	def pop(self,n):
		for i in R(n):
			if self.len:self.len-=1
			else:self.mod//=self.div.pop()
		if self.len<1:self.ans%=self.mod

	def Get(self):
		return -1if self.len else self.ans

R=range
J=lambda:map(int,input().split())
dcrt=DynamicChineseRemiderTheorem()
for q in R(sum(J())):
	t,*v=J()
	if t<2:dcrt.append(v[0],v[1])
	elif t<3:dcrt.pop(v[0])
	else:a=dcrt.Get();print(a if a<0 else a%v[0])
0