hdu 1251

 

统计难题

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 9806    Accepted Submission(s): 3949


Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
 


 

Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.
 


 

Output
对于每个提问,给出以该字符串为前缀的单词的数量.
 


 

Sample Input
banana band bee absolute acm ba b band abc
Sample Output
2 3 1 0


每天学点新东西
今天学了点trie,以前只闻其名,未曾写过,今天自习看了看,貌似不难
照着ac自动机的模版写了第一个trie的程序(囧),1Y




#include <cstdio>
#include 
<cstdlib>
#include 
<cstring>
#include 
<cmath>
#include 
<ctime>
#include 
<cassert>
#include 
<iostream>
#include 
<sstream>
#include 
<fstream>
#include 
<map>
#include 
<set>
#include 
<vector>
#include 
<queue>
#include 
<algorithm>
#include 
<iomanip>
using namespace std;

struct node
{
    
int next[26];
    
int x;
    
int count;
    
void init()
    
{
        memset(next,
-1,sizeof(next));
        count
=0;
    }

}
 s[5000005];
int ind,sind;
void cas_init()
{
    s[
0].init();
    sind
=1;
}

void ins(char str[])
{
    
int len=strlen(str);
    
int i,j,ind;
    
for(i=ind=0;i<len;i++)
    
{
        j
=str[i]-'a';
        
if(s[ind].next[j]==-1)
        
{
            s[sind].init();
            s[ind].next[j]
=sind++;
        }

        s[ind].count
++;
        ind
=s[ind].next[j];
    }

    s[ind].count
++;
}

int search(char str[])
{
    
int ind,i,j,len=strlen(str);
    ind
=0;
    
for(i=0;i<len;i++)
    
{
        j
=str[i]-'a';
        
if(s[ind].next[j]==-1)
            
return 0;
        
else ind=s[ind].next[j];
    }

    
return s[ind].count;
}

int main()
{
    
char str[15];
    
int num;
    cas_init();
    
while(gets(str)&&str[0]!='\0') ins(str);
    
while(gets(str))
    
{
        num
=0;
        num
=search(str);
        printf(
"%d\n",num);
    }

    
return 0;
}






就是这个hdu1251


posted on 2012-07-15 23:22 jh818012 阅读(156) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年7月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿

文章档案(85)

搜索

最新评论