ZOJ 2619 generator 【字符串+期望】

来源:互联网 发布:印度无人机 知乎 编辑:程序博客网 时间:2024/06/05 21:10

题目连接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1619

题目大意:

给定字符集大小,每次随机产生一个字符,直到出现给定的字符串时停止。问期望长度

解题思路:

不知很清楚为什么这么做,看了别人代码。具体数学上有证明,在第二版的401的8.4FLIPPING COINS上有证明,但是本人水平太渣了,没看懂。。。囧。最开始是用kmp+高斯消元搞的,精度怎么改都不够,这个原理也看不懂,我真是太弱了。

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;char str[20];bool judge(int i,int j){    for(int k=0;str[i+k]&&str[j+k];k++){        if(str[i+k]!=str[j+k])return false;    }    return true;}int main(){    int T;    scanf("%d",&T);    int ca=1;    while(T--){        int n;        scanf("%d%s",&n,str);        long long res=0;        for(int i=0;str[i];i++){                if(judge(0,i))res++;                res=res*n;        }        printf("Case %d:\n",ca++);        printf("%lld\n",res);        if(T)printf("\n");    }}