codeforces 176B - Word Cut DP

来源:互联网 发布:淘宝雷锋侠在哪申请 编辑:程序博客网 时间:2024/06/05 03:44
/******其实每一次变换,只是把数组str,从str[i]输出而已循环构成条件:守恒的操作或者是可以确定状态的变换先掌握变换的本质,先掌握变换的本质啊!!!!*****/#include<cstdio>#include<cstring>#define mod 1000000007#define LL long longconst 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;}


原创粉丝点击