/******
其实每一次变换,只是把数组str,从str[i]输出而已
循环构成条件:守恒的操作或者是可以确定状态的变换
先掌握变换的本质,先掌握变换的本质啊!!!!
*****/
#include<cstdio>
#include<cstring>
#define mod 1000000007
#define LL long long
const int LMT= 1002;
char a[LMT<<1],b[LMT];
LL dp[100003][2];
int main(void)
{
int k,x=0,len;
scanf("%s%s",a,b);
scanf("%d",&k);
len=strlen(a);
dp[0][strcmp(a,b)!=0]=1;
for(int i=0;i<len;i++)a[i+len]=a[i];
for(int i=0;i<len;i++)
if(strncmp(a+i,b,len)==0)x++;
for(int i=0;i<k;i++)
{
dp[i+1][0]=(x*dp[i][1]+(x-1)*dp[i][0])%mod;
dp[i+1][1]=((len-x)*dp[i][0]+(len-x-1)*dp[i][1])%mod;
}
printf("%I64d\n",dp[k][0]);
return 0;
}
codeforces 176B - Word Cut DP
最新推荐文章于 2022-03-16 17:05:26 发布