地址:http://acm.hdu.edu.cn/showproblem.php?pid=2072

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

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

you are my friend
#
Sample Output
4
    set做法:

    

#include<iostream>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
typedef long long ll;
set<string>se;
int main()
{
string s;
while(getline(cin,s))
{
if(s[]=='#')
break;
string m;
se.clear();
int len=s.length();
// cout<<"len: "<<len<<endl;
for(int i=;i<len;i++)
{
// cout<<i<<" "<<s[i]<<endl;
if(s[i]>='a'&&s[i]<='z')
{
int j;
m.clear();
for(j=i;j<len&&s[j]>='a'&&s[j]<='z';j++)
{
m+=s[j];
}
i=j;
se.insert(m);
}
}
cout<<se.size()<<endl;
}
return ;
}

    

  istringstream 做法(具体的我看不太懂,反正可以去掉空格):
    
#include<iostream>
#include<cstring>
#include<sstream>
#include<cstdio>
#include<set>
using namespace std;
typedef long long ll;
set<string>q;
int main()
{
string s;
while(getline(cin,s)){
if(s[]=='#')
break;
istringstream sss(s);
q.clear();
string ss;
while(sss>>ss){
q.insert(ss);
}
cout<<q.size()<<endl;
}
return ;
}

    重点是字典树操作,由于对num数组的理解不透彻,写出了一堆BUG,自己实在不会变通啊。  

    这里的num数组记录的是:标记当前字符串结尾。比如qwe   qw : 先是qwe可以得到:  1(q)  2(w)  3(e)  4

                                             0    0    1

                                  表示以e结尾的加入了

                                   然后qw,k=2处,num=1,表示以w结尾的加入了。这就是两个单词。

      上代码吧,开始看ac自动机了

       

#include<iostream>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
typedef long long ll;
#include<map>
const int maxn=1e4+;
int tr[maxn][];
int num[maxn];
string s;
string mid;
int k=;
int ans=;
int join()
{
int p=;
int len=mid.length();
int ok1=,ok2=;
for(int i=;i<len;i++)
{
int c=mid[i]-'a';
if(!tr[p][c])
{
tr[p][c]=k++;
}
p=tr[p][c];
}
if(!num[p])    //当前单词结尾没被标记,说明是一个新的单词。
{
num[p]=;
return ;
}
else
return ;
}
int main() //qq as a
{
while(getline(cin,s))
{
if(s[]=='#')
break;
k=;
ans=;
memset(tr,,sizeof(tr));
memset(num,,sizeof(num));
int len=s.length();
for(int i=;i<len;i++)
{
if(s[i]>='a'&&s[i]<='z')
{
mid.clear();
int j;
for(j=i;j<len&&s[j]>='a'&&s[j]<='z';j++)
{
mid+=s[j];
}
i=j;
//
if(join()==)
{
ans++;
// cout<<mid<<" "<<ans<<endl;
}
}
}
cout<<ans<<endl;
}
return ;
}

                                     

    

hdu 2072(字典树模板,set,map均可做)的更多相关文章

  1. HDU - 1251 字典树模板题

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

  2. hdu 1251 字典树模板题 ---多串 查找单词出现次数

    这道题题目里没有给定数据范围 我开了2005  疯狂的WA 然后开了50000, A掉  我以为自己模板理解错  然后一天没吃饭,饿得胃疼还是想着把这题A掉再去吃,谁知竟然是这样的问题,,,呵呵~~~ ...

  3. 字典树模板题(统计难题 HDU - 1251)

    https://vjudge.net/problem/HDU-1251 标准的字典树模板题: 也注意一下输入方法: #include<iostream> #include<cstdi ...

  4. 字典树模板 HDU - 1251

    题意: 给一些单词,换行键后,查找以后输入的单词作为前缀的话们在之前出现过几次. 思路: 字典树模板----像查字典的顺序一样 #include<string> #include<s ...

  5. hdu1521(字典树模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意: 中文题诶~ 思路: 字典树模板 代码1: 动态内存, 比较好理解一点, 不过速度略慢, ...

  6. CH 1601 - 前缀统计 - [字典树模板题]

    题目链接:传送门 描述给定 $N$ 个字符串 $S_1,S_2,\cdots,S_N$,接下来进行 $M$ 次询问,每次询问给定一个字符串 $T$,求 $S_1 \sim S_N$ 中有多少个字符串是 ...

  7. HDU 2072 - 单词数 - [(有点小坑的)字典树模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 Problem Descriptionlily的好朋友xiaoou333最近很空,他想了一件没有 ...

  8. 【统计难题】【HDU - 1251】【map打表或字典树】【字典树模板】

    思路 题意:题目为中文题,这里不再过多阐述. 思路1:可以在读入单词表的过程中将单词分解,用map将它一 一记录 思路2:利用字典树,这个方法较快些,下面代码中会分别给出数组和结构体指针两种形式的字典 ...

  9. P1184 高手之在一起(字典树模板题,hash算法, map)

    哎,唯一值得说明的是,这道题的输入有bug 先把字典树的算法模板放一下 #include<iostream> #include<cstring> using namespace ...

随机推荐

  1. P1047 编程团体赛

    转跳点:

  2. 批处理+7zip解压用纯数字加密的压缩包zip

    @echo off set path=c:\Program Files\7-Zip; for /L %%i in (0,1,100000) do ( call :myfunc %%i ) goto : ...

  3. 官网英文版学习——RabbitMQ学习笔记(九)总结

    RabbitMQ与spingboot相整合,主要步骤也很简单: 一.首先需要的是添加依赖 二.需要设置属性,属性主要是设置rabbitmq的地址端口,用户名密码回调等需要用到的一些常量,在整合过程中, ...

  4. [LeetCode] 933. Number of Recent Calls 最近的调用次数

    Write a class RecentCounter to count recent requests. It has only one method: ping(int t), where t r ...

  5. 二十六、JavaScript之查找子字符串substring和slice和substr

    一.代码如下 二.效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" conten ...

  6. 类的始祖Object

    一.概述 Object时java中顶级父类,也是唯一没有父类的类:它是整个java中最基本的类,在java中所有的类都默认继承了Object. 二.重要方法 1.clone方法 克隆出一个新的对象. ...

  7. 九、React中的组件、父子组件、React props父组件给子组件传值、子组件给父组件传值、父组件中通过refs获取子组件属性和方法

    一.概述 React中的组件: 解决html 标签构建应用的不足. 使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入. [父子组件]:组件的相互调用中,我们把调用者称为父 ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-lock

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  9. 08 SSM整合案例(企业权限管理系统):08.权限控制

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 08.权限控制 SSM权限操作 ...

  10. slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETRY_COUNT设置和查看

    在主从复制中,有几个参数是非常重要的,包括slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETR ...