标签:AtCoder int rep Reordering ans 234 freq LL mod
期末考试考完了…开始补题了
最近几场ATC的ABC都很简单,前五题都是普及组左右,因此目前的目标就是能够稳出F
这次F的读题没读明白,读错了,实际上是可以乱序,因此就是一个数学组合题:
#define int LL
const int N = 5010,mod=998244353;
int n,m,k;
int f[N][N],fac[N],inv[N],finv[N],freq[27];
string s;
//f[i][j]表示前i个字母组成的长度为j的子序列的数量
//f[i][j]+=for(k=0;k<=min(j,freq[i]);k++) f[i-1][j-k]*C(k,j)
void init(){
fac[0]=fac[1]=1;
inv[1]=1;
finv[0]=finv[1]=1;
rep(i,2,5001){
fac[i]=fac[i-1]*i%mod;
inv[i]=fpower(i,mod-2,mod);
finv[i]=finv[i-1]*inv[i]%mod;
// debug(finv[i]);
}
}
LL C(int a,int b){
if(b>a||a<0||b<0) return 0;
// debug(fac[a]); debug(finv[b]);debug(finv[b-a]); debug(finv[2]);
return fac[a]*finv[b]%mod*finv[a-b]%mod;
}
void solve(){
init();
cin >> s; n=s.size();
for(auto u:s) freq[u-'a']++;
f[0][0]=1;
rep(i,0,25)
rep(j,0,n){
rep(k,0,min(j,freq[i])){
f[i+1][j] += f[i][j-k] * C(j,k);
f[i+1][j] %= mod;
}
}
LL ans = 0;
rep(i,1,n) (ans+=f[26][i])%=mod;
print(ans);
}
//=================================
signed main(){
solve();
return 0;
}
标签:AtCoder,int,rep,Reordering,ans,234,freq,LL,mod 来源: https://blog.csdn.net/m0_51780913/article/details/122387780
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。