結果

問題 No.3310 mod998
コンテスト
ユーザー sasa8uyauya
提出日時 2025-10-24 23:07:26
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,369 bytes
コンパイル時間 421 ms
コンパイル使用メモリ 82,080 KB
実行使用メモリ 234,604 KB
最終ジャッジ日時 2025-10-24 23:08:08
合計ジャッジ時間 19,748 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 24 WA * 9
権限があれば一括ダウンロードができます

ソースコード

diff #

def TASIZAN(a,b):
  n=len(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 c

def HIKIZAN(a,b):
  n=len(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 c

def WARIZAN(a,b):
  p1=[]
  p2=0
  for d in a:
    p2=p2*10+int(d)
    p1+=[p2//b]
    p2=p2%b
  return 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(list(map(int,input())),1)
    if len(k)<=100:
      k=int("".join(map(str,k)))
      if k<=len(pa):
        print(pa[k-1]%M)
        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