zoukankan      html  css  js  c++  java
  • 统计难题 HDU

    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
    Input
    输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

    注意:本题只有一组测试数据,处理到文件结束.
    Output
    对于每个提问,给出以该字符串为前缀的单词的数量.
    Sample Input

    banana
    band
    bee
    absolute
    acm

    ba
    b
    band
    abc

    Sample Output

    2
    3
    1
    0
    推荐博客:https://www.cnblogs.com/TheRoadToTheGold/p/6290732.html

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <stack>
    #define LL long long
    #define PI acos(-1.0)
    const int maxn=4e5+10;
    const int inf=0x3f3f3f3f;
    using namespace std;
    int trie[maxn][30],sum[maxn],cnt; 
    //trie[i][j]=x:编号为i的节点的第j个孩子的编号为x。
    //sum数组表示前缀出现的次数 
    char s[15];
    void insert()
    {
    	int len=strlen(s);
    	int root=0;
    	//树根的编号为0 
    	for(int i=0;i<len;i++)
    	{
    		int id=s[i]-'a';
    		if(!trie[root][id])
    		  trie[root][id]=++cnt;
    		sum[trie[root][id]]++;
    		root=trie[root][id];
    	}
    	
    }
    int find()
    {
       int len=strlen(s);
       int root=0;
       for(int i=0;i<len;i++)
       {
          int id=s[i]-'a';
    	  if(!trie[root][id]) return 0;
    	  root=trie[root][id];	
       }
       return 1;	
    } 
    int cal()
    {
       int len=strlen(s);
       int root=0;
       for(int i=0;i<len;i++)
       {
          int id=s[i]-'a';
    	  if(!trie[root][id]) return 0;
    	  root=trie[root][id];	
       }
       //前缀出现的次数是标记在前缀的最后一个字母所在位置的后一个位置上 
       return sum[root];	
    	
    } 
    int main(void)
    {
    	//这个输入要用gets() 
        while(gets(s)&&strcmp(s,"")!=0)
        {
        	insert();		
    	}
    	while(~scanf("%s",s))
        {
        	printf("%d
    ",cal());
    	}
        return 0;
    }
    
    
  • 相关阅读:
    分布式、集群的概念、区别
    Entity Framework学习
    QT入门
    Xcode插件开发
    函数指针
    c创建win窗口
    设置UITableView section间距
    使用谷歌地图时报一堆错的解决方法
    IOS地图及定位使用
    IOS判断手机型号
  • 原文地址:https://www.cnblogs.com/qinjames/p/10554687.html
Copyright © 2011-2022 走看看