hdu - 1251 통계 난제 - 사전 트 리 의 간단 한 응용
3109 단어 사전 트 리
통계 적 난제
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)
Problem Description
Ignatius 는 최근 어 려 운 문제 에 부 딪 혔 습 니 다. 선생님 께 서 는 그 에 게 많은 단어 (소문 자로 만 구성 되 어 있 고 중복 되 는 단어 가 나 오지 않 습 니 다) 를 주 셨 습 니 다. 지금 선생님 께 서 는 어떤 문자열 을 접두사 로 하 는 단어 수 (단어 자체 도 자신의 접두사) 를 집계 하 라 고 하 셨 습 니 다.
Input
데 이 터 를 입력 하 는 첫 번 째 부분 은 단어 표 입 니 다. 줄 마다 단어 가 있 고 단어의 길 이 는 10 을 넘 지 않 습 니 다. 선생님 이 Ignatius 에 게 통계 한 단 어 를 대표 합 니 다. 빈 줄 은 단어 표 의 끝 을 대표 합 니 다. 두 번 째 부분 은 일련의 질문 입 니 다. 줄 마다 질문 이 있 고 모든 질문 은 하나의 문자열 입 니 다.
메모: 이 문 제 는 파일 이 끝 날 때 까지 테스트 데이터 만 있 습 니 다.
Output
질문 마다 이 문자열 을 접두사 로 하 는 단어의 수 를 알려 줍 니 다.
Sample Input
banana band bee absolute acm ba b band abc
Sample Output
2 3 1 0
解题思路
字典树的应用。
T-T从来没写过以空行为结尾的。。。捣鼓了半天。
代码
#include
#include
#include
using namespace std;
char s[11];
struct node
{
int count;
node *next[26];// 26
node()
{
memset(next,NULL,sizeof(next));
count = 0;
}
};
node *p,*root=new node();
void insert()
{
int i=0,t;
p=root;//
while(s[i]!='\0')//
{
t=s[i]-'a';
if(p->next[t]==NULL)//
p->next[t]=new node();
p=p->next[t];//
p->count++;
i++;
}
}
//
/*
int search()
{
int i=0,t;
p=root;
while(s[i]!='\0')
{
t=s[i]-'a';
if(p->next[t]!=NULL) p=p->next[t];
else break;
i++;
}
if(s[i]=='\0') return p->count;// ,s[i] ‘/0’, ,
else return 0;
}
*/
int find()
{
int i=0,t;
p=root;
while(s[i]!='\0')
{
t=s[i]-'a';
if(p->next[t]==NULL)
return 0;
else p=p->next[t];
i++;
}
return p->count;
}
int main()
{
//while(gets(s),*s)//
while(gets(s),s[0]!='\0')//
insert();
while(scanf("%s",s)!=EOF)//
{
int ans = find();
printf("%d
",ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
poj2630Phone List (정적 트 라이 트 리)이 문 제 는 항 저 우 전기 1671 과 마찬가지 로 - > 자세 한 내용 은 여 기 를 찌 르 세 요 < - 그래서 1671 의 코드 로 한 통 을 제출 했 는데 결국 TLE 가 되 었 습 니 다.과감하게 정적 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.