计蒜客 劫富济贫 (Trie树)
**链接 : ** Here!
**思路 : ** Trie树裸题, 由开始给出的名字建一棵字典树, 然后每次查询一下抢♂劫的人名是否在字典树中, 复杂度也不清楚是多少, 反正是没给出 $M$ 的范围, 开始时用 $hash$ 做, $T$ 了, 分析一下也可以知道为什么 $T$, 因为对于不在富豪列表中的人, 还得跑一遍 $hash$ 函数, 这样的话每次就得执行 $strlen(NotRichName)$ 很浪费时间, 但是在 $Trie$ 树中直接 $1$ 次就能判定了, 所以对于这道题 $Trie树$ 不会 $T$.
/*************************************************************************
> File Name: t22.cpp
> Author:
> Mail:
> Created Time: 2017年11月24日 星期五 17时05分20秒
************************************************************************/
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_N = 1e8 + 2;
typedef long long ll;
const int SIZE = 30;
int n, m, x;
char str[MAX_N];
typedef struct TNode {
int is_terminal;
struct TNode **childs;
} TNode, *root;
TNode* new_node() {
TNode *p = (TNode *)malloc(sizeof(TNode));
p->childs = (TNode **)malloc(sizeof(TNode *) * SIZE);
memset(p->childs, 0, sizeof(TNode *) * SIZE);
p->is_terminal = -1;
return p;
}
void clear(TNode *p) {
if (!p) return;
for (int i = 0 ; i < SIZE ; ++i) {
clear(p->childs[i]);
}
free(p->childs);
free(p);
}
void insert(TNode *node, char *pattern, int x) {
TNode *p = node;
for (int i = 0 ; pattern[i] ; ++i) {
if (p->childs[pattern[i] - 'a'] == NULL) {
p->childs[pattern[i] - 'a'] = new_node();
}
p = p->childs[pattern[i] - 'a'];
}
p->is_terminal = x;
}
int find(TNode *node, char *pattern) {
TNode *p = node;
for (int i = 0 ; pattern[i] ; ++i) {
if (p->childs[pattern[i] - 'a'] == NULL) {
return -1;
}
p = p->childs[pattern[i] - 'a'];
}
return p->is_terminal;
}
int main() {
TNode *root = new_node();
scanf("%d", &n);
for (int i = 0 ; i < n ; ++i) {
getchar();
scanf("%s%d", str, &x);
insert(root, str, x);
}
scanf("%d", &m);
for (int i = 0 ; i < m ; ++i) {
int flag = 1;
scanf("%d", &x);
ll ans = 0;
for (int j = 0 ; j < x ; ++j) {
getchar();
scanf("%s", str);
if (flag == 0) continue;
int ret = find(root, str);
if (ret == -1) flag = 0;
ans += (ll)ret;
}
printf("%lld\n", flag == 0 ? -1 : ans);
}
clear(root);
return 0;
}
计蒜客 劫富济贫 (Trie树)的更多相关文章
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)
ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...
- 计蒜客 A1607 UVALive 8512 [ACM-ICPC 2017 Asia Xi'an]XOR
ICPC官网题面假的,要下载PDF,点了提交还找不到结果在哪看(我没找到),用VJ交还直接return 0;也能AC 计蒜客题面 这个好 Time limit 3000 ms OS Linux 题目来 ...
- [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】
Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
随机推荐
- openstack liberty aio nova 调试
- 64. Extjs中grid 的ColumnModel 属性配置
转自:https://blog.csdn.net/u011530389/article/details/45821945 本文导读:Ext.grid.ColumnModel 该类用于定义表格的列模型, ...
- css的一些命名规范
网页制作中规范使用DIV+CSS命名规则,可以改善优化功效特别是团队合作时候可以提供合作制作效率,具体DIV CSS命名规则CSS命名大全内容篇. 常用DIV+CSS命名大全集合,即CSS命名规则 D ...
- codevs1230元素查找(hash)
1230 元素查找 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个 ...
- [jzoj NOIP2018模拟10.23]
丢分主要是下面几个方面: 1.T2代码交错了,有个特判没写丢了10分 2.T1线段树加等差数列写错了(其实二维差分就可以,但我当时不会) 3.T3思考再三还是为了10分写上了主席树,还是写错了 总体评 ...
- [Swift通天遁地]七、数据与安全-(6)管理文件夹和创建并操作文件
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- unittest举例
步骤:1.先导入unittest2.编写一个测试类(继承unittest.TestCase)3.编写测试用例类,一个方法就是一条用例4.加载测试用例,有三种方式:加载测试方法,加载测试类,加载测试模块 ...
- zoj3675 BFS+状态压缩
#include <stdio.h> #include <string.h> #include <queue> using namespace std; int n ...
- 解决Oracle 本地可以连接,远程不能连接问题
一.问题描述: 1.telnet 2.输入命令 lsnrctl status 远程访问不到的原因为:监听指向的是localhost,而不是你本机的远程访问ip地址,因此需要将监听的指向修改为你本机的远 ...
- Elasticsearch之CURL命令的DELETE
也可以看我写的下面的博客 Elasticsearch之curl删除 Elasticsearch之curl删除索引库 删除,某一条数据,如下 [hadoop@master elasticsearch-] ...