您的位置:首页 > 其它

codeforces 176B - Word Cut DP

2013-02-18 20:05 344 查看
/******
其实每一次变换,只是把数组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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: