【Codeforces Round #107 (Div. 2)】Quantity of Strings
Quantity of Strings
题意:长度为N的字符串,M种不同的字符串,任意长度为K的字符串都是回文串。
题解:分类讨论
当K > N时 K 随机组合,结果就是MK
当K = N时分奇偶性进行判断,结果就是M(K+1)/2
当K < N时
- 奇数时可以abababab,共有M*M种情况。
- 偶数时只能aaaaaaaa,只有M种情况。
注意取模
#include <cstdio>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
ll pow(ll x,ll y){
ll res=1;
while(y){
if(y%2)res*=x;
x=x*x;
res%=mod;
x%=mod;
y/=2;
}
return res%mod;
}
int main(){
ll N,M,K;
scanf("%lld%lld%lld",&N,&M,&K);
if(K==1){
printf("%lld\n",pow(M,N));
return 0;
}
if(K%2==0){
if(N>K){
printf("%lld\n",M);
}
else{
if(N==K)
printf("%lld\n",pow(M,K/2));
else
printf("%lld\n",pow(M,N));
}
}
else{
if(N>K){
printf("%lld\n",(M*M)%mod);
}
else{
if(N==K){
printf("%lld\n",pow(M,N/2+1));
}
else printf("%lld",pow(M,N));
}
}
return 0;
}