結果

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

ソースコード

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
  for i in range(len(c)):
    if c[i]!=0:
      return c[i:]

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)<=3:
      if int("".join(map(str,k)))<=len(pa):
        k=int("".join(map(str,k)))
        print(pa[k-1]%M)
        continue
    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