結果

問題 No.2761 Substitute and Search
ユーザー sasa8uyauya
提出日時 2025-02-08 12:33:11
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 3,985 ms / 4,000 ms
コード長 1,047 bytes
コンパイル時間 720 ms
コンパイル使用メモリ 82,572 KB
実行使用メモリ 169,224 KB
最終ジャッジ日時 2025-02-08 12:33:48
合計ジャッジ時間 37,361 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13
権限があれば一括ダウンロードができます

ソースコード

diff #

class BIT:
  def __init__(self,n,M):
    self.s=n
    self.d=[0]*n
    self.m=M
    return
  def add(self,p,x):
    p+=1
    while p<=self.s:
      self.d[p-1]+=x
      self.d[p-1]%=self.m
      p+=p&(-p)
    return
  def sum(self,p):
    p+=1
    a=0
    while p>0:
      a+=self.d[p-1]
      a%=self.m
      p-=p&(-p)
    return a

n,l,q=map(int,input().split())

B=1234512345
M=(1<<61)-1
P=[1,B]
for i in range(2,l+1):
  P+=[P[-1]*P[1]%M]
R=[1,pow(B,M-2,M)]
for i in range(2,l+1):
  R+=[R[-1]*R[1]%M]

S=[]
H=[]
for i in range(n):
  S+=[list(map(ord,list(input())))]
  H+=[BIT(l,M)]
  for j in range(l):
    H[i].add(j,S[i][j]*P[j]%M)

for _ in range(q):
  que=input().split()
  if int(que[0])==1:
    _,k,c,d=que
    k=int(k)-1
    c=ord(c)
    d=ord(d)
    for i in range(n):
      if S[i][k]==c:
        H[i].add(k,(-c+d)*P[k]%M)
        S[i][k]=d
  else:
    _,t=que
    t=list(t)
    h=0
    for i in range(len(t)):
      h+=ord(t[i])*P[i]
      h%=M
    g=0
    for i in range(n):
      if H[i].sum(len(t)-1)==h:
        g+=1
    print(g)
0