标签:std 字符 prot 输出 const lld printf family com
第一行一个整数$n$,表示字符串的长度。
第二行一个只包含小写字母的字符串$s$。
一行一个整数表示答案对$998244353$取模后的结果。
样例输入:
2
a
样例输出:
625
对于$20\%$的测试数据,$n\leqslant 4$。
对于$40\%$的测试数据,$n\leqslant 100$。
对于$60\%$的测试数据,$n\leqslant 10,000,000$。
对于另外$20\%$的测试数据,保证$s$只由$a$组成。
对于$100\%$的测试数据,$2\leqslant n\leqslant 10,1\leqslant |s|\leqslant 1,000,000$。
对于$100\%$的测试数据,$|s|\leqslant n$。
他们跟我说,打表找了个规律……
反正我是没有找出来。
其实答案就是:
$$26^n-26^{(n-s)}-s\times 25\times 26^{(n-s-1)}$$
时间复杂度:$\Theta(\log n)$。
期望得分:$100$分。
实际得分:$100$分。
#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
long long n,s;
char ch[1000001];
long long ans;
long long qpow(long long x,long long y)
{
if(y<0)return 0;
long long res=1;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
int main()
{
scanf("%lld%s",&n,ch+1);
s=strlen(ch+1);
ans=((qpow(26,n)-qpow(26,n-s)+mod)%mod-s*25%mod*qpow(26,n-s-1)%mod+mod)%mod;
printf("%lld",ans);
return 0;
}
rp++
标签:std 字符 prot 输出 const lld printf family com
原文地址:https://www.cnblogs.com/wzc521/p/11821970.html