데이터 구조 문학 연구 조수 (AC 자동 동기)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <malloc.h>
#include <queue>
using namespace std;
#define M 25
#define N 10
#define maxn 225
int num[1050];
int row[N][1000]; //
struct Trie
{
Trie *fail,*next[130];
int last;
Trie()
{
for(int i=0;i<130;i++)
next[i]=NULL;
fail=NULL;
last=-1;
}
}*root;
void inserttrie(char *str,int k)
{
int len=strlen(str);
Trie *p=root;
for(int i=0;i<len;i++)
{
int id=str[i]-' ';
if(p->next[id]==NULL)
{
p->next[id]=new Trie;
}
p=p->next[id];
}
p->last=k;
}
void buildfail()
{
Trie *son,*temp,*p=root;
queue<struct Trie*>que;
que.push(p);
while(!que.empty())
{
temp=que.front();
que.pop();
for(int i=0;i<130;i++)
{
son=temp->next[i];
if(son!=NULL)
{
if(temp==root)son->fail=root;
else
{
p=temp->fail;
while(p)
{
if(p->next[i])
{
son->fail=p->next[i];
break;
}
p=p->fail;
}
if(!p)son->fail=root;
}
que.push(son);
}
}
}
}
void querry(char *str,int m)
{
int len=strlen(str);
Trie *p=root;
Trie *temp;
for(int i=0;i<len;i++)
{
if(str[i]==' ')
{
p=root;
continue;
}
else
{
int id=str[i]-' ';
while(p!=root&&p->next[id]==NULL)p=p->fail;
p=p->next[id];
if(!p)p=root;
temp=p;
while(temp!=root)
{
if(temp->last>=0)
{
num[temp->last]++;
row[temp->last][m]=1;
}
temp=temp->fail;
}
}
}
}
int main()
{
int n;
char str[N][M]; //
char text[maxn]; //
char name[50]; //
FILE *fp;
printf(" :");
scanf("%d",&n);
memset(num,0,sizeof(num));
memset(row,0,sizeof(row));
root=new Trie;
for(int i=1;i<=n;i++)
{
printf(" %d :",i);
scanf("%s",str[i]);
inserttrie(str[i],i);
}
buildfail();
printf(" :");
scanf("%s",name);
if (!(fp=(fopen(name,"r")))) //
{
printf("Open file error!
");
exit(0);
}
int k=1; //
while (!feof(fp))
{
fgets(text,maxn,fp); // , text
querry(text,k);
k++; // 1,
}
for(int i=1;i<=n;i++)
{
int flag=0;
printf("%s :",str[i]);
for(int j=0;j<1000;j++)
{
if(row[i][j])
{
flag=1;
printf(" %d ",j);
}
}
if(!flag)
printf(" ");
printf("
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.