讨论 / 求人来看看 KMP+栈 为什么都是无输出
33171915 2012-10-16 22:30:00
点我顶贴 收藏 删除
状态: Unaccepted

测评机: Xeond[6]

得分: 10分

提交日期: 2012-10-17 13:28:00

有效耗时: 47毫秒

测试结果1: 选手程序无输出

测试结果2: 选手程序无输出

测试结果3: 选手程序无输出

测试结果4: 选手程序无输出

测试结果5: 选手程序无输出

测试结果6: 选手程序无输出

测试结果7: 选手程序无输出

测试结果8: 选手程序无输出

测试结果9: 选手程序无输出

测试结果10: 通过本测试点|有效耗时47ms

#include <iostream>

#include <string>

using namespace std;

string A,s[2];

int m=0,d[2],ans,g,lenA,lenB,next[10000];

void Nt()

{

int j=-1;

next[0]=-1;

for(int i=1;i<lenA;i++)

{

while( j>-1 && A[i]!=A[j+1] )

j=next[j];

if( A[i]==A[j+1] )

j++;

next[i]=j;

}

}

int KMP()

{

int dm=m^1;

int j=-1;

d[dm]=0;

for(int i=0;i<d[m];i++)

{

++d[dm];

s[dm][ d[dm]-1 ]=s[m][i];

while( j>-1 && A[j+1]!=s[m][i])

j=next[j];

if( A[j+1]==s[m][i] )

j++;

if( j==lenA-1 )

{

j=-1;

d[dm]-=lenA;

ans++;

}

}

if(d[dm]==d[m] || d[dm]==0) return 0;

m=dm;

return 1;

}

int main()

{

freopen("in.txt","r",stdin);

freopen("out.txt","w",stdout);

cin>>A>>s[0];

lenA=A.size();d[0]=s[0].size();

Nt();

for(;KMP()==1;);

cout<<ans<<endl;

return 0;

}

查看更多回复
提交回复