結果

問題 No.2703 FizzBuzz Letter Counting
ユーザー ゼットゼット
提出日時 2024-03-30 00:27:05
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 2,891 ms / 3,000 ms
コード長 3,528 bytes
コンパイル時間 282 ms
コンパイル使用メモリ 82,404 KB
実行使用メモリ 82,568 KB
最終ジャッジ日時 2024-09-30 17:18:06
合計ジャッジ時間 84,522 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 41 ms
53,888 KB
testcase_01 AC 45 ms
54,144 KB
testcase_02 AC 49 ms
61,696 KB
testcase_03 AC 2,451 ms
82,188 KB
testcase_04 AC 473 ms
77,520 KB
testcase_05 AC 487 ms
78,276 KB
testcase_06 AC 1,189 ms
79,616 KB
testcase_07 AC 1,937 ms
81,024 KB
testcase_08 AC 278 ms
77,936 KB
testcase_09 AC 2,219 ms
81,168 KB
testcase_10 AC 1,239 ms
80,252 KB
testcase_11 AC 251 ms
77,404 KB
testcase_12 AC 1,608 ms
80,592 KB
testcase_13 AC 682 ms
78,788 KB
testcase_14 AC 2,603 ms
82,184 KB
testcase_15 AC 2,503 ms
81,800 KB
testcase_16 AC 2,480 ms
82,316 KB
testcase_17 AC 410 ms
77,464 KB
testcase_18 AC 1,848 ms
80,896 KB
testcase_19 AC 1,505 ms
80,512 KB
testcase_20 AC 1,781 ms
80,896 KB
testcase_21 AC 1,131 ms
79,744 KB
testcase_22 AC 685 ms
77,872 KB
testcase_23 AC 2,708 ms
81,932 KB
testcase_24 AC 1,393 ms
79,872 KB
testcase_25 AC 1,532 ms
80,640 KB
testcase_26 AC 2,597 ms
82,012 KB
testcase_27 AC 2,224 ms
81,152 KB
testcase_28 AC 2,845 ms
82,312 KB
testcase_29 AC 2,891 ms
82,056 KB
testcase_30 AC 2,838 ms
82,328 KB
testcase_31 AC 2,784 ms
82,180 KB
testcase_32 AC 2,808 ms
82,060 KB
testcase_33 AC 2,847 ms
82,312 KB
testcase_34 AC 2,890 ms
82,176 KB
testcase_35 AC 2,857 ms
82,268 KB
testcase_36 AC 2,838 ms
81,928 KB
testcase_37 AC 2,854 ms
82,316 KB
testcase_38 AC 2,830 ms
81,936 KB
testcase_39 AC 2,817 ms
82,316 KB
testcase_40 AC 2,857 ms
82,196 KB
testcase_41 AC 2,873 ms
82,568 KB
testcase_42 AC 2,836 ms
82,056 KB
testcase_43 AC 43 ms
54,272 KB
testcase_44 AC 41 ms
53,632 KB
testcase_45 AC 42 ms
54,144 KB
testcase_46 AC 43 ms
54,400 KB
testcase_47 AC 43 ms
54,400 KB
testcase_48 AC 40 ms
53,632 KB
testcase_49 AC 41 ms
53,760 KB
testcase_50 AC 41 ms
53,632 KB
testcase_51 AC 42 ms
53,632 KB
testcase_52 AC 43 ms
54,144 KB
testcase_53 AC 41 ms
53,760 KB
testcase_54 AC 41 ms
53,504 KB
testcase_55 AC 41 ms
53,248 KB
testcase_56 AC 41 ms
53,888 KB
testcase_57 AC 41 ms
53,888 KB
testcase_58 AC 42 ms
53,504 KB
testcase_59 AC 40 ms
53,504 KB
testcase_60 AC 41 ms
53,504 KB
testcase_61 AC 40 ms
53,120 KB
testcase_62 AC 39 ms
53,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

N=int(input())
u15=[0]*60
v15=[0]*60
v15[0]=10
mod=998244353
for j in range(1,60):
  x,y=(u15[j-1]**2%mod)*15+2*v15[j-1]*u15[j-1],v15[j-1]**2
  if y>=15:
    x+=y//15
    y%=15
  x%=mod
  y%=mod
  u15[j],v15[j]=x,y
u5=[0]*60
v5=[0]*60
u5[0]=2
gg=[1]*60
for j in range(1,60):
  gg[j]=gg[j-1]*2
for j in range(1,60):
  x,y=(u5[j-1]**2%mod)*5+2*v5[j-1]*u5[j-1],v5[j-1]**2
  if y>=5:
    x+=y//5
    y%=5
  x%=mod
  y%=mod
  u5[j],v5[j]=x,y
u0=[0]*60
v0=[0]*60
v0[0]=10
for j in range(1,60):
  v0[j]=v0[j-1]**2
  v0[j]%=mod
u3=[0]*60
v3=[0]*60
u3[0]=3
v3[0]=1
for j in range(1,60):
  x,y=(u3[j-1]**2%mod)*3+2*v3[j-1]*u3[j-1],v3[j-1]**2
  if y>=3:
    x+=y//3
    y%=3
  x%=mod
  y%=mod
  u3[j],v3[j]=x,y
o=0
def g(l,c):
  x,y=0,1
  if c==15:
    for k in range(60):
      if gg[k]>l:
        break
      if (l>>k)&1:
        a,b=u15[k],v15[k]
        x2,y2=(x*a%mod)*15+y*a+b*x,b*y
        x2%=mod
        y2%=mod
        if y2>=15:
          x2+=y2//15
          y2%=15
        x,y=x2,y2
  elif c==5:
    for k in range(60):
      if gg[k]>l:
        break
      if (l>>k)&1:
        a,b=u5[k],v5[k]
        x2,y2=(x*a%mod)*5+y*a+b*x,b*y
        x2%=mod
        y2%=mod
        if y2>=5:
          x2+=y//5
          y2%=5
        x,y=x2,y2
  elif c==3:
    for k in range(60):
      if gg[k]>l:
        break
      if (l>>k)&1:
        a,b=u3[k],v3[k]
        x2,y2=(x*a%mod)*3+y*a+b*x,b*y
        x2%=mod
        y2%=mod
        if y2>=3:
          x2+=y//3
          y2%=3
        x,y=x2,y2
  else:
    for k in range(60):
      if gg[k]>l:
        break
      if (l>>k)&1:
        y*=v0[k]
        y%=mod
  return x,y
mm=0
def f(a2,l,c):
  global mm
  x,y=0,0
  a,b=0,0
  for k in range(60,-1,-1):
    mm+=1
    x,y=((x*a)%mod)*c+(b+1)*x+y*a,y*(b+1)
    x+=y//c
    y%=c
    a,b=((a**2)%mod)*c+b*a+a*b,b*b
    a+=b//c
    b%=c
    x%=mod
    a%=mod
    if (l>>k)&1:
      x*=10
      y*=10
      x%=mod
      y+=a2
      x+=y//c
      y%=c
      if a==0 and b==0:
        b=10
        continue
      a*=10
      b*=10
      a%=mod
      a+=b//c
      b%=c
      x%=mod
      a%=mod
  return x,y
def h(n):
  if n==0:
    return 0
  ans=1-(n+1)*pow(10,n,mod)+n*pow(10,n+1,mod)
  ans%=mod
  ans*=pow(81,-1,mod)
  ans%=mod
  ans*=480
  ans%=mod
  w=10*(pow(10,n,mod)-1)
  w%=mod
  w*=pow(9,-1,mod)
  w%=mod
  w*=96
  result=ans+w
  result%=mod
  return result
count=0
ans=''
L=[]
for i in range(N):
  v,l=map(int,input().split())
  if count+l<=2:
    ans+=str(v)*l
  count+=l
  L.append((v,l))
def t(a,l,count,c):
  x1,y1=f(a,l,c)
  x2,y2=g(count,c)
  x,y=((x1*x2)%mod)*c+y1*x2+x1*y2,y1*y2
  if y>=c:
    x+=y//c
    y%=c
  return x,y
if count<=2:
  result=0
  x=int(ans)
  for y in range(1,x+1):
    if y%15==0:
      result+=8
    elif y%5==0:
      result+=4
    elif y%3==0:
      result+=4
    else:
      z=str(y)
      result+=len(z)
  print(result)
  exit()
a0,a1=0,0
b0,b1=0,0
c0,c1=0,0
d=0
count=0
for i in range(N-1,-1,-1):
  v,l=L[i][:]
  a2,a3=t(v,l,count,15)
  a0+=a2
  a1+=a3
  a0+=a1//15
  a1%=15
  b2,b3=t(v,l,count,5)
  b0+=b2
  b1+=b3
  b0+=b1//5
  b1%=5
  c2,c3=t(v,l,count,3)
  c0+=c2
  c1+=c3
  c0+=c1//3
  c1%=3
  d2,d3=t(v,l,count,mod)
  d+=d3
  d%=mod
  count+=l
u=10**9+7
result=a0*8+(b0-a0)*4+(c0-a0)*4
result%=mod
d-=a0+(b0-a0)+(c0-a0)
_,k=f(9,count-1,mod)
k1,_=f(9,count-1,15)
k2,_=f(9,count-1,5)
k3,_=f(9,count-1,3)
w=k-(k1+(k2-k1)+(k3-k1))
d-=w
result+=d*count
result+=h(count-3)
result%=mod
for x in range(1,100):
  if x%5!=0 and x%3!=0:
    y=str(x)
    result+=len(y)
    result%=mod
print(result)
0