1. 程式人生 > >Educational Codeforces Round 52E(構造,快速冪)

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;
}