zoukankan      html  css  js  c++  java
  • [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;
    }
    
    只要有想见的人,就不是孤身一人了。
  • 相关阅读:
    设计模式目录
    垃圾收集器
    598. Range Addition II
    Java中的四种引用
    垃圾回收算法
    645. Set Mismatch
    java 8中撤销永久代,引入元空间
    L2-013. 红色警报 (并查集)
    POJ 1127 Jack Straws (线段相交)
    L2-014. 列车调度 (DP)
  • 原文地址:https://www.cnblogs.com/Agakiss/p/11828870.html
Copyright © 2011-2022 走看看