Educational Codeforces Round 52E(构造,快速幂)

#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
long long b[200007];
long long ksm(long long x,long long y){//快速幂
    long long ans=1;
    while(x){
        if(x&1)
            ans=ans*y%mod;
        y=y*y%mod;
        x>>=1;
    }
    return ans;
}
int main(){
    long long n,m,a;
    scanf("%lld%lld%lld",&n,&m,&a);
    long long ans=1;
    for(int i=1;i<=m;i++){
        scanf("%lld",&b[i]);
        long long c=ksm(b[i]-b[i-1],a);//多出来的部分进行排列组合
        ans=c*(c+1)/2%mod*ans%mod;//左右各多余部分的a次方,即x^2a,减去左右倒置后相同,即与一边的组合情况数量相等,即x^a,除以二得到交换后相同的数量再加上之前被减去的左右镜像的x^a种得到答案
    }
    ans=ans*ksm(n-2*b[m],a)%mod;//快速幂乘上还未组合过的
    printf("%lld\n",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ldudxy/p/9825222.html