hdu 2072(字典树模板,set,map均可做)
地址: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均可做)的更多相关文章
- HDU - 1251 字典树模板题
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input输入数据的第一部 ...
- hdu 1251 字典树模板题 ---多串 查找单词出现次数
这道题题目里没有给定数据范围 我开了2005 疯狂的WA 然后开了50000, A掉 我以为自己模板理解错 然后一天没吃饭,饿得胃疼还是想着把这题A掉再去吃,谁知竟然是这样的问题,,,呵呵~~~ ...
- 字典树模板题(统计难题 HDU - 1251)
https://vjudge.net/problem/HDU-1251 标准的字典树模板题: 也注意一下输入方法: #include<iostream> #include<cstdi ...
- 字典树模板 HDU - 1251
题意: 给一些单词,换行键后,查找以后输入的单词作为前缀的话们在之前出现过几次. 思路: 字典树模板----像查字典的顺序一样 #include<string> #include<s ...
- hdu1521(字典树模板)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意: 中文题诶~ 思路: 字典树模板 代码1: 动态内存, 比较好理解一点, 不过速度略慢, ...
- CH 1601 - 前缀统计 - [字典树模板题]
题目链接:传送门 描述给定 $N$ 个字符串 $S_1,S_2,\cdots,S_N$,接下来进行 $M$ 次询问,每次询问给定一个字符串 $T$,求 $S_1 \sim S_N$ 中有多少个字符串是 ...
- HDU 2072 - 单词数 - [(有点小坑的)字典树模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 Problem Descriptionlily的好朋友xiaoou333最近很空,他想了一件没有 ...
- 【统计难题】【HDU - 1251】【map打表或字典树】【字典树模板】
思路 题意:题目为中文题,这里不再过多阐述. 思路1:可以在读入单词表的过程中将单词分解,用map将它一 一记录 思路2:利用字典树,这个方法较快些,下面代码中会分别给出数组和结构体指针两种形式的字典 ...
- P1184 高手之在一起(字典树模板题,hash算法, map)
哎,唯一值得说明的是,这道题的输入有bug 先把字典树的算法模板放一下 #include<iostream> #include<cstring> using namespace ...
随机推荐
- P1047 编程团体赛
转跳点:
- 批处理+7zip解压用纯数字加密的压缩包zip
@echo off set path=c:\Program Files\7-Zip; for /L %%i in (0,1,100000) do ( call :myfunc %%i ) goto : ...
- 官网英文版学习——RabbitMQ学习笔记(九)总结
RabbitMQ与spingboot相整合,主要步骤也很简单: 一.首先需要的是添加依赖 二.需要设置属性,属性主要是设置rabbitmq的地址端口,用户名密码回调等需要用到的一些常量,在整合过程中, ...
- [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 ...
- 二十六、JavaScript之查找子字符串substring和slice和substr
一.代码如下 二.效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" conten ...
- 类的始祖Object
一.概述 Object时java中顶级父类,也是唯一没有父类的类:它是整个java中最基本的类,在java中所有的类都默认继承了Object. 二.重要方法 1.clone方法 克隆出一个新的对象. ...
- 九、React中的组件、父子组件、React props父组件给子组件传值、子组件给父组件传值、父组件中通过refs获取子组件属性和方法
一.概述 React中的组件: 解决html 标签构建应用的不足. 使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入. [父子组件]:组件的相互调用中,我们把调用者称为父 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-lock
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 08 SSM整合案例(企业权限管理系统):08.权限控制
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 08.权限控制 SSM权限操作 ...
- slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETRY_COUNT设置和查看
在主从复制中,有几个参数是非常重要的,包括slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETR ...