結果

問題 No.3310 mod998
コンテスト
ユーザー sasa8uyauya
提出日時 2025-10-24 22:43:26
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,446 bytes
コンパイル時間 330 ms
コンパイル使用メモリ 82,360 KB
実行使用メモリ 289,516 KB
最終ジャッジ日時 2025-10-24 22:44:41
合計ジャッジ時間 36,463 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 23 TLE * 10
権限があれば一括ダウンロードができます

ソースコード

diff #

def TASIZAN(a,b):
  n=len(a)
  a=list(map(int,a))
  b=[0]*(n-len(str(b)))+list(map(int,str(b)))
  c=[0]*(n+1)
  for i in reversed(range(n)):
    c[i+1]+=a[i]+b[i]
    c[i]+=c[i+1]//10
    c[i+1]%=10
  return "".join(list(map(str,c)))

def HIKIZAN(a,b):
  n=len(a)
  a=list(map(int,a))
  b=[0]*(n-len(str(b)))+list(map(int,str(b)))
  c=[0]*n
  for i in reversed(range(n)):
    if a[i]<b[i]:
      a[i]+=1
      a[i-1]-=1
    c[i]=a[i]-b[i]
  return "".join(list(map(str,c)))

def WARIZAN(a,b):
  p1=[]
  p2=0
  for d in a:
    p2=p2*10+int(d)
    p1+=[p2//b]
    p2=p2%b
  return "".join(list(map(str,p1))),p2

T=int(input())
M=998
for _ in range(T):
  n,m=map(int,input().split())
  p=[1]
  d={1:0}
  while 1:
    np=p[-1]*n%M
    if np in d:
      l=d[np]
      break
    d[np]=len(p)
    p+=[np]
  pa=p[:l]
  pb=p[l:]
  for i in range(1,len(pa)):
    pa[i]+=pa[i-1]
    pa[i]%=M
  for i in range(1,len(pb)):
    pb[i]+=pb[i-1]
    pb[i]%=M
  for i in range(m):
    k=TASIZAN(input(),1)
    if len(k)<=4:
      k=int(k)
      if k<=len(pa):
        print(pa[k-1])
        continue
      a=pa[-1] if len(pa)>0 else 0
      k-=len(pa)
      a+=pb[-1]*(k//len(pb))
      k%=len(pb)
      if k!=0:
        a+=pb[k-1]
      print(a%M)
      continue
    else:
      a=pa[-1] if len(pa)>0 else 0
      k=HIKIZAN(k,len(pa))
      p1,p2=WARIZAN(k,len(pb))
      p3,p4=WARIZAN(p1,M)
      a+=pb[-1]*p4
      if p2!=0:
        a+=pb[p2-1]
      print(a%M)
0