帮我看下以下程序哪里错了,是hdu2222题,样例数据都过了,但提交老是wrong answer ,我是用KMP算法做的
#include<iostream>usingnamespacestd;charaim[10001][52];intnext[52];//////////////////...
#include<iostream>
using namespace std;
char aim[10001][52];
int next[52];
/////////////////////////////////////////////////////////////////
class KeywordsSearch{
private:
char source[100002];
int count;
int strNum;
int sourceLength;
public:
void initial(int num);
void readCase();
void get_next(char aim[]);
void KMP(char aim[]);
void output();
};
void KeywordsSearch::initial(int num){
count=0;
strNum=num;
}
void KeywordsSearch::readCase(){
getchar();
for(int i=0;i<strNum;i++){
gets(aim[i]);
}
gets(source);
sourceLength=strlen(source);
}
void KeywordsSearch::get_next(char aim[]){
int len=strlen(aim);
int i=0;
next[0]=-1;
int j=-1;
while(i<len){
if(j==-1||aim[i]==aim[j]){
i++;j++;
if(aim[i]!=aim[j]) next[i]=j;
else next[i]=next[j];
}else{
j=next[j];
}
}
}
void KeywordsSearch::KMP(char aim[]){
int i=0,j=0;
int len=strlen(aim);
while(i<sourceLength&&j<len){
if(j==-1||source[i]==aim[j]){
i++;j++;
}else{
j=next[j];
}
}
if(j==len){
count++;
}
}
void KeywordsSearch::output(){
printf("%d\n",count);
}
////////////////////////////////////////////////////////////////
int main(){
int n;
int num;
KeywordsSearch x;
while(scanf("%d",&n)){
while(n--){
scanf("%d",&num);
x.initial(num);
x.readCase();
for(int i=0;i<num;i++){
x.get_next(aim[i]);
x.KMP(aim[i]);
}
x.output();
}
}
return 0;
} 展开
using namespace std;
char aim[10001][52];
int next[52];
/////////////////////////////////////////////////////////////////
class KeywordsSearch{
private:
char source[100002];
int count;
int strNum;
int sourceLength;
public:
void initial(int num);
void readCase();
void get_next(char aim[]);
void KMP(char aim[]);
void output();
};
void KeywordsSearch::initial(int num){
count=0;
strNum=num;
}
void KeywordsSearch::readCase(){
getchar();
for(int i=0;i<strNum;i++){
gets(aim[i]);
}
gets(source);
sourceLength=strlen(source);
}
void KeywordsSearch::get_next(char aim[]){
int len=strlen(aim);
int i=0;
next[0]=-1;
int j=-1;
while(i<len){
if(j==-1||aim[i]==aim[j]){
i++;j++;
if(aim[i]!=aim[j]) next[i]=j;
else next[i]=next[j];
}else{
j=next[j];
}
}
}
void KeywordsSearch::KMP(char aim[]){
int i=0,j=0;
int len=strlen(aim);
while(i<sourceLength&&j<len){
if(j==-1||source[i]==aim[j]){
i++;j++;
}else{
j=next[j];
}
}
if(j==len){
count++;
}
}
void KeywordsSearch::output(){
printf("%d\n",count);
}
////////////////////////////////////////////////////////////////
int main(){
int n;
int num;
KeywordsSearch x;
while(scanf("%d",&n)){
while(n--){
scanf("%d",&num);
x.initial(num);
x.readCase();
for(int i=0;i<num;i++){
x.get_next(aim[i]);
x.KMP(aim[i]);
}
x.output();
}
}
return 0;
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询