結果
問題 | No.603 hel__world (2) |
ユーザー |
![]() |
提出日時 | 2020-02-23 17:29:17 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,037 ms / 3,000 ms |
コード長 | 1,509 bytes |
コンパイル時間 | 206 ms |
コンパイル使用メモリ | 82,064 KB |
実行使用メモリ | 140,732 KB |
最終ジャッジ日時 | 2024-10-10 05:02:01 |
合計ジャッジ時間 | 15,153 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
from decimal import *from fractions import Fractiongetcontext().prec=60mod=10**6+3invs=[0]*modinvs[1]=1for i in range(2, mod):invs[i]=mod-invs[mod%i]*(mod//i)%moddef solve(x, v):m=len(v)if m==0:return 1s=sum(v)if x<s:return 0elif x==s:return 1v.sort()vs=[]cnt2=1for i in range(1, m):if v[i]!=v[i-1]:vs.append((v[i-1], cnt2))cnt2=0cnt2+=1vs.append((v[m-1], cnt2))l=Decimal(1)r=Decimal(max(v)+2)for _ in range(150):mid=(l+r)/Decimal(2)cnt=0for p in vs:cnt+=p[1]*int(Decimal(p[0])/(mid-Decimal(1)))if cnt<x-s:r=midelse:l=midret=1cnt=0f=Fraction(10**19, 1)for p in vs:k=int(Decimal(p[0])/(l-Decimal(1)))if k==0:continuef=min(f, Fraction(p[0]+k, k))cnt+=k*p[1]for i in range(p[0]):ret=ret*pow((k+i+1)*invs[i+1]%mod, p[1], mod)%modp=f.numeratorq=f.denominatorret*=pow(q, cnt-(x-s), mod)*pow(p, mod-1-(cnt-(x-s))%(mod-1), mod)ret%=modreturn retv=[[] for i in range(26)]x=list(map(int, input().split()))t=input()n=len(t)cnt=1for i in range(1, n):if t[i]!=t[i-1]:v[ord(t[i-1])-ord('a')].append(cnt)cnt=0cnt+=1v[ord(t[n-1])-ord('a')].append(cnt)ans=1for i in range(26):a=solve(x[i], v[i])#print(a)ans=ans*a%modprint(ans)