HDU 1251 (통계 난제) 사전 트 리 템 플 릿 & & map 구현

[제목 링크]: 여 기 를 클릭 하 세 요 ~ ~
[제목 부주의]:
Problem Description
Ignatius 는 최근 어 려 운 문제 에 부 딪 혔 습 니 다. 선생님 께 서 는 그 에 게 많은 단어 (소문 자로 만 구성 되 어 있 고 중복 되 는 단어 가 나 오지 않 습 니 다) 를 주 셨 습 니 다. 지금 선생님 께 서 는 어떤 문자열 을 접두사 로 하 는 단어 수 (단어 자체 도 자신의 접두사) 를 집계 하 라 고 하 셨 습 니 다.
 
Input
데 이 터 를 입력 하 는 첫 번 째 부분 은 단어 표 입 니 다. 줄 마다 단어 가 있 고 단어의 길 이 는 10 을 넘 지 않 습 니 다. 선생님 이 Ignatius 에 게 통계 한 단 어 를 대표 합 니 다. 빈 줄 은 단어 표 의 끝 을 대표 합 니 다. 두 번 째 부분 은 일련의 질문 입 니 다. 줄 마다 질문 이 있 고 모든 질문 은 하나의 문자열 입 니 다.
메모: 이 문 제 는 파일 이 끝 날 때 까지 테스트 데이터 만 있 습 니 다.
 
Output
질문 마다 이 문자열 을 접두사 로 하 는 단어의 수 를 알려 줍 니 다.
 
Sample Input
 
   
banana band bee absolute acm ba b band abc
 

Sample Output
 
   
2 3 1 0
【字典树模板】:

代码:

/*
* Problem:HDU 1251
* Running time: 93MS
* Complier: G++
* Author: herongwei
* Create Time: 20:20 2015/10/27    
*/
#include 
#include 
#include 
#include 
using namespace std;

const int maxn=4e5+10;
struct trie
{
    int sz;
    int ch[450000][26];
    int sum[4500000];
    trie(){sz=1;
    memset(ch,0,sizeof(ch));
    memset(sum,0,sizeof(sum));
    }
    int idx(char c){return c-'a';}
    void insert(char *s)
    {
        int u=0,n=strlen(s);
        for(int i=0; i

맵 맵 맵:
#include 
#include 
#include 
#include 
#include 
using namespace std;
mapmp;
string s="";
int main()
{
    //freopen("1.txt","r",stdin);
    char ch;
    while(true){
        scanf("%c",&ch);
        if(ch=='
'){ scanf("%c",&ch); s=""; } s+=ch; if(ch=='
') break; mp[s]++; } while(cin>>s){ printf("%d
",mp[s]); } return 0; }

좋은 웹페이지 즐겨찾기