Educational Codeforces Round 52E(構造,快速冪)
阿新 • • 發佈:2018-11-07
#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;
}