链接:https://ac.nowcoder.com/acm/contest/9981/A
来源:牛客网
长度不超过nnn,且包含子序列“us”的、只由小写字母构成的字符串有多少个? 答案对109+710^9+7109+7取模。
所谓子序列,指一个字符串删除部分字符(也可以不删)得到的字符串。
例如,"unoacscc"包含子序列"us",但"scscucu"则不包含子序列"us"
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+100; const int mod=1e9+7; int n; //一个长度为n的字符串 //包含一个us即可 //在已经有一个u的情况下,后面要有s //枚举u的位置 //保证前面不包含u //pow(25,i-1)*(pow(26,n-i)-pow(25,n-i)) long long c26[maxn]; long long c25[maxn]; long long f26[maxn]; long long f25[maxn]; int main () { scanf("%d",&n); long long ans=0; f26[0]=f25[0]=1; for (int i=1;i<=n;i++) { f26[i]=f26[i-1]*26; f26[i]%=mod; f25[i]=f25[i-1]*25; f25[i]%=mod; c26[i]=c26[i-1]+f26[i]; c25[i]=c25[i-1]+f25[i]; c26[i]%=mod; c25[i]%=mod; } for (int i=1;i<=n;i++) { ans+=f25[i-1]*(c26[n-i]-c25[n-i]+mod)%mod; ans%=mod; } printf("%lld ",ans); }