[CSP-S模拟测试]:小W的魔术(数学 or 找规律)

Posted wzc521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CSP-S模拟测试]:小W的魔术(数学 or 找规律)相关的知识,希望对你有一定的参考价值。

题目传送门(内部题130)


输入格式

  第一行一个整数$n$,表示字符串的长度。
  第二行一个只包含小写字母的字符串$s$。


输出格式

  一行一个整数表示答案对$998244353$取模后的结果。


样例

样例输入:

2
a

样例输出:

625


数据范围与提示

  对于$20\\%$的测试数据,$nleqslant 4$。
  对于$40\\%$的测试数据,$nleqslant 100$。
  对于$60\\%$的测试数据,$nleqslant 10,000,000$。
  对于另外$20\\%$的测试数据,保证$s$只由$a$组成。
  对于$100\\%$的测试数据,$2leqslant nleqslant 10,1leqslant |s|leqslant 1,000,000$。
  对于$100\\%$的测试数据,$|s|leqslant n$。


题解

他们跟我说,打表找了个规律……

反正我是没有找出来。

其实答案就是:

$$26^n-26^{(n-s)}-s imes 25 imes 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++

以上是关于[CSP-S模拟测试]:小W的魔术(数学 or 找规律)的主要内容,如果未能解决你的问题,请参考以下文章

[CSP-S模拟测试]:最大异或和(数学)

[CSP-S模拟测试]:Seat(概率DP+数学)

[CSP-S模拟测试]:Equation(数学+树状数组)

[CSP-S模拟测试]:小P的生成树(数学+Kruskal)

[CSP-S模拟测试]:画作(BFS+数学)

[CSP-S模拟测试]:炼金术士的疑惑(模拟+数学+高斯消元)