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