【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时

  1. 奇数时可以abababab,共有M*M种情况。
  2. 偶数时只能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;
}
posted @ 2020-01-10 16:11  流浪AC  阅读(168)  评论(0编辑  收藏  举报