2072单词数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 90501 Accepted Submission(s): 23217
Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
Sample Output
4
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
const int maxn = 1e4 + 5;
int tot;
bool flag[maxn];
int date[maxn][30];
void insert(string s)
{
int len = s.size();
int root = 0;
for (int i = 0; i < len; i++)
{
int id = s[i] - 'a';
if (!date[root][id])
{
date[root][id] = ++tot;
}
root = date[root][id];
}
flag[root] = 1;
}
bool enqury(string s)
{
int root = 0, len = s.size();
for (int i = 0; i < len; i++)
{
int id = s[i] - 'a';
if (!date[root][id])
{
return true;
}
root = date[root][id];
}
if (flag[root])
return false;
return true;
}
string str1, str2;
void clear()
{
memset(flag, 0, sizeof(flag));
memset(date, 0, sizeof(date));
tot = 0;
}
int main()
{
while (getline(cin, str1))
{
int ans = 0;
if (str1[0] == '#')
break;
stringstream ss(str1);
while (ss >> str2)
{
if (enqury(str2))
{
ans++;
insert(str2);
}
}
cout << ans << endl;
clear();
}
return 0;
}