B题数组开的时候开多了,所以一直wa,细心;

D题 大意是一个长度为n的字符串可以有m种字母组成,这个字符串每k个连续的字符都是回文串,还是不难想的,如果k==1或者k>n只有m种情况,如果k==n任意一个字符串都是可以的,就是n^m%p;其他情况如果n是奇数那么可以都相同,也可以间隔一个相同,就是任选2个字符,偶数的话只能都是相同的,代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
LL mod=1e9+7;
int main()
{
    LL n,m,k;
    cin>>n>>m>>k;
    LL ans=1;

    if(k==1||k>n)
    {
        for(int i=0;i<n;i++)
        {
            ans=ans*m%mod;
        }
    }
    else if(k==n)
    {
        int v=(n+1)/2;
        for(int i=0;i<v;i++)ans=ans*m%mod;

    }
    else if(k%2==1)
    {
        ans=m*m%mod;
    }
    else ans=m;
    cout<<ans%mod<<endl;
}
View Code

 

posted on 2021-05-24 19:53  小灰灰的父亲  阅读(31)  评论(0编辑  收藏  举报