TOJ3097: 单词后缀 (字典树 or map瞎搞)
传送门 (<---可以点击的~)
时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte
描述
有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里面找出某个后缀的单词个数。
输入
输入有多组数据。
每组第一行输入n,m,0<=n,m<=100000,
第二行到n+1行:输入单词,每个单词仅有小写英文字母组成,长度不超过10。
第n+2行到n+m+1行,输入要找的单词后缀。
输出
在n个单词里面找出输入单词后缀的单词个数,然后输出。每个数据与数据之间换行。
样例输入
6 3
someone
everyone
outside
inside
somebody
nobody
one
side
body
样例输出
2
2
2
思路:既然是求后缀个数,把字符串倒一倒就变求前缀个数了,然后就是写字典树。这题的话,map瞎搞也是能过的,耗时在800MS左右(感觉还是老老实实字典树吧~)
拿来练字典树模板的。
字典树代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long LL;
char str[];
struct note{
note* nxt[];
int sum;//保存出现个数
note(){
sum = ;
memset(nxt,,sizeof(nxt));
}
}a[];
void insert(note *root,char s[]){
note *p = root;
int i = ;
while(s[i]){
int j = s[i++] - 'a';
if(p->nxt[j] ==NULL){
p->nxt[j] = new note();
}
p = p->nxt[j];
(p->sum) ++;//在构建的时候直接把当前结点的sum+1 说明出现过后缀
}
}
int search(note *root ,char s[]){
note *p = root;
int i = ;
while(s[i]){
int j = s[i++]-'a';
if(p->nxt[j] == NULL)return ;
p = p -> nxt[j];
}
return p -> sum;
}
int main(){
int n,m;
while(~scanf("%d %d",&n,&m)){
note * root = new note();
while(n--){
scanf("%s",str);
strrev(str);
insert(root,str);
}
while(m--){
scanf("%s",str);
strrev(str);
printf("%d\n",search(root,str));
}
}
return ;
}
map代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#include <sstream>
#define LL long long
using namespace std;
map<string,int>ma;
int main(){
int n,m;
string s;
char str[];
while(~scanf("%d%d",&n,&m)){
ma.clear();
while(n--){
cin>>s;
reverse(s.begin(),s.end());
while(s.size()>){
ma[s]++;
s.erase(s.size()-);
}
}
while(m--){
scanf("%s",str);strrev(str);
printf("%d\n",ma[str]);
}
}
}
TOJ3097: 单词后缀 (字典树 or map瞎搞)的更多相关文章
- BZOJ 4236: JOIOJI map瞎搞
分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...
- BestCoder Round #92 1001 Skip the Class —— 字典树 or map容器
题目链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=748&pid=1001 题解: 1.trie树 关 ...
- HDU-1251 统计难题,字典树或者map!
统计难题 很久就看过这个题了,但不会~~~不会~~ 题意:给出一张单词表,然后下面有若干查询,每次给出一个单词,问单词表中是否存在以这个单词为前缀的单词,输出数量.本身也是自身的前缀.只有一组数据! ...
- poj 2503 Babelfish(字典树或map或哈希或排序二分)
输入若干组对应关系,然后输入应该单词,输出对应的单词,如果没有对应的输出eh 此题的做法非常多,很多人用了字典树,还有有用hash的,也有用了排序加二分的(感觉这种方法时间效率最差了),这里我参考了M ...
- POJ2945(Find the Clones)--字典树,map
题意:给你n个规定长度的单词,问你其中出现了1次的单词,出现两次的单词...出现n次单词分别有多少个. 当然这题map也能过,但是这里介绍字典树的做法. 首相对于n个单词存入树中,当然建树过程中遇到一 ...
- hdu1251 字典树or map
一道字典树的题,不过看起来用map更为简单 传送门 题意: 给出一堆字符串构成一个字典,求字典里以某字符串为前缀的字符串有几个 思路: 输入字符串时把字符串的前缀全部存进map并标记次数 查询时直接输 ...
- HihoCoder1366 逆序单词(字典树)
逆序单词 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在英文中有很多逆序的单词,比如dog和god,evil和live等等. 现在给出一份包含N个单词的单词表,其中每 ...
- hdu2072 单词数 字典树
字典树裸题 #include<stdio.h> #include<string.h> ][]; ]; int cnt; int ans; void Insert(char *w ...
- Java实现 LeetCode 720 词典中最长的单词(字典树)
720. 词典中最长的单词 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最 ...
随机推荐
- jgGrid pivot reload重新加载及刷新数据
1.当使用jqGrid进行多维表时,reload方法会不停的重复增加标题的行数. 解决办法:直接删除jqGrid,重新初始化页面. function query(){//crossTable pivo ...
- vue的初识与简单使用---前后端分离通过接口调取数据
vue的安装 #### .环境搭建 ''' - 安装node ``` 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ ``` - 安装cnpm ``` npm inst ...
- jqGrid基本使用
jqGrid: 参照网址:官网地址http://www.trirand.com/ http://blog.mn886.net/jqGrid/(快速获取demo) http://www.guriddo. ...
- mysql存储过程使用游标循环插入数据
DELIMITER $$ DROP PROCEDURE IF EXISTS `procedure_course`$$ CREATE DEFINER=`root`@`localhost` PROCEDU ...
- cin.tie与sync_with_stdio加速输入输出
在LeetCode上练习习题的时候每次AC之后都会去看别人的代码,几乎每次都能遇到cin.tie与sync_with_stdio.类似这样: static auto x = [](){ std::io ...
- 遍历DOM树,获取所有兄弟节点
获取兄弟节点的常用方法有: 方法 说明 siblings() 选取所有兄弟节点 next() 选取后面兄弟节点 nextAll() 选取所有后面的兄弟节点 nextUntil() 选取所有 ...
- Delphi实现图像文本旋转特效完整代码
Delphi实现图像文本旋转特效完整代码,本程序利用的控件主要是Panel 控件.Image 控件.Edit 控件.Label 控件和Button 控件.本程序的关键是利用Delphi 的bmp_ro ...
- 开发一个FTP软件
一.开发一个多并发的FTP server 需求: .允许同时支持多用户在线 .用户认证 .用户空间配额 .权限限制 .可上传下载.上传下载过程中显示进度条 .用户可远程切换目录.查看服务端文件列表等 ...
- ajax跨域名
跨域环境模拟: 修改host文件 三种解决的方案 1:ifram(display:none) 2:jsonp(注意是只是适合的是get请求) 生成一个带有src的script标签, 3:cros(后台 ...
- 初识Swift中的值和引用,循坏引用、代理的注意点
1.0 在Swift中分有值类型和引用类型 Int .String . 结构体和枚举都属于值类型, 将值类型传递给方法是,将在内存中创建其副本,并传递这个副本:这样我们就可以随心所欲修改它,而不用担心 ...