单词数 HDU - 2072(字典树模板题&stl)

lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。

Input 有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。 Output 每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。 Sample Input

you are my friend
#
Sample Output
4

模板题就不多说什么了,需要注意的是一开头可能就是空格而且不止一个,两个单词之间可能不止有一个空格,结尾不止有一个空格。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int N=1e5+1;
const int mod=1e9+7;
const double pi=acos(-1);
const double eps=1e-8;
string ss,s;
int trie[N][26],tot;
bool vis[N];
LL ans;
void sert()
{
    int id,root=0;
    int len=s.length();
    for(int i=0;i='a'&&ss[i]<='z')
                s+=ss[i];
            else
            {
                if(i==0&&!(ss[0]>='a'&&ss[0]<='z')) continue;
                if(!(ss[i-1]>='a'&&ss[i-1]<='z')) continue;//通过这里来判断,如果每一个非字母前面的字符不是字母,那就continue,否则就把前面那个单词插入到字典树中
                sert();
                s.clear();
            }
        }
        printf("%lld\n",ans);
    }
}

这题用map也能过

#include
#include
#include
#include
#include
#include
#define LL long long
using namespace std;
char a[110000];
mapma;
int main()
{
    while(gets(a))
    {
        ma.clear();
        if(a[0]=='#')
            break;
        int ans=0;
        int la=strlen(a);
        string w="";
        ma[w]=1;
        for(int i=0;i


你可能感兴趣的:(hdu,STL,字典树)