码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1065E(计数)

时间:2018-11-28 22:25:57      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:bit   https   img   mes   规模   fine   计数   c++   typedef   

题目链接

题意:限定字符串长度为n,字符集规模为A,以及m个数字b,对于任意数字bi满足长度为bi的前缀和后缀先反转再交换位置后形成的新串与原串视作相等,问存在多少不同串

思路:设技术分享图片,将字符串看成由长度技术分享图片串构成,那么只需考虑技术分享图片中对应串的方案数和中间单独的方案数,相乘即答案.

假设考虑技术分享图片位,形成回文的对应串有技术分享图片,不形成的有技术分享图片,相加后得技术分享图片,中间即技术分享图片.

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;
const long long mod = 998244353;
const int maxn = 2e5+5;
using namespace std;
typedef long long LL;

LL n,m,A;
LL b[maxn];

LL qpow(LL a,LL b,LL p){
    LL res=1;
    while(b){
        if(b&1)res=(res*a)%p;
        a=a*a%p,b/=2;
    }return res;
}

int main(){
    scanf("%I64d%I64d%I64d",&n,&m,&A);
    for(int i=1;i<=m;i++)scanf("%I64d",&b[i]);
    LL ans=1,inv=qpow(2,mod-2,mod);
    for(int i=1;i<=m;i++){
        LL tmp=qpow(A,b[i]-b[i-1],mod);
        ans=ans*tmp%mod*(1+tmp)%mod*inv%mod;
    }
    ans*=qpow(A,n-2*b[m],mod);
    printf("%I64d\n",ans%mod);
    return 0;
}

Codeforces 1065E(计数)

标签:bit   https   img   mes   规模   fine   计数   c++   typedef   

原文地址:https://www.cnblogs.com/DuskOB/p/10034474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!