• [11.10模拟赛]T1


    Description

    (W)终于学会了魔术, 她迫不及待的想要给你展示一下,小(W)的魔术是这样的:
    她可以删去一个字符串的任意一个连续子串(可以为空) , 然后把剩下的部分按顺序拼接成一个字符串。
    (W)由于刚刚学会魔术, 她只能使用一次。
    (W)还有一个特别喜欢的字符串(s),如果使用一次魔术之后剩下的字符串就是(s),小(W)就会对自己的魔术感到满意,但是并不是所有字符串可能让小(W)感到满意。
    (W)想知道长度为(n)的只由小写字母组成的字符串中,无论小(W)如何使用魔法都不会满意的有多少个。

    Input

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

    Output

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

    Sample Input

    2
    a

    Sample Output

    625

    Data Constraint

    对于 (20\%) 的测试数据,(nleq 4)
    对于 (40\%) 的测试数据,(nleq 100)
    对于 (60\%) 的测试数据,(nleq 10000000)
    对于另外 (20\%) 的测试数据,保证(s)只由(a)组成。
    对于 (100\%) 的测试数据,(2leq nleq 10^{18},1leq|s|leq 1000000)
    对于 (100\%) 的测试数据,(|s|leq n)

    Limit

    (1000ms) (512MB)

    Solution

    正难则反。
    设原来的字符串长度为(n),删之后的长度为(l)
    那么原来的字符串总共有(26^n)中可能
    我们往长度为(l)的字符串中插入长度为(n-l)的字符串可以保证合法(但不能保证重复)
    长度为(l)的字符串前后总共有(l+1)的位置可以插入
    其中第一个位置(第一个字母之前)有(26^{n-l})中插法
    之后的(l)个位置为了保证不和前面的重复,总有第一个位置的第一个字母不能和前面的重复,所以有(25*26^{n-l-1})种插法
    所以答案为(26^n-26^{n-l}-last 25ast 26^{n-l-1})
    友情提醒:三年( ext{OI})一场空,不开( ext{long long})见祖宗

    Code

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define ll long long
    #define MOD 998244353
    #define N 2000010
    ll n, l;
    char s[N];
    inline ll read() {
    	ll s = 0, w = 1;
    	char c = getchar();
    	for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
    	for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
    	return s * w;
    }
    inline ll Pow(ll a, ll b) {
    	if (b < 0) return 0; 
    	ll ans = 1;
    	while (b) {
    		if (b % 2) (ans *= a) %= MOD;
    		(a *= a) %= MOD;
    		b >>= 1;
    	}
    	return ans;
    }
    int main() {
    	
    	freopen("magic.in","r",stdin);
    	freopen("magic.out","w",stdout);
    	n = read();
    	scanf("%s", s + 1);
    	l = strlen(s + 1);
    	printf("%lld", (Pow(26, n) + MOD - Pow(26, n - l) + (MOD - l) * (25 * Pow(26, n - l - 1) % MOD)) % MOD);
    	return 0;
    }
    
    只要有想见的人,就不是孤身一人了。
  • 相关阅读:
    第8章 降维
    第7章 集成学习和随机森林
    JS利用async、await处理少见的登录业务逻辑
    SQL SERVER 实现多行转多列
    Mysql函数----控制流函数介绍
    继承----静态代码快、构造方法、代码块、普通方法的执行顺序
    RBAC----基于角色的访问权限控制
    秋招-----思特沃克视频面试总结
    tomcat启动失败的三种方法
    索引之----mysql联合索引
  • 原文地址:https://www.cnblogs.com/Agakiss/p/11828870.html
Copyright © 2020-2023  润新知