计蒜客 劫富济贫 (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 ...
随机推荐
- QSettings读写注冊表、配置文件
简述 普通情况下.我们在开发软件过程中,都会缓存一些信息到本地,能够使用轻量级数据库sqlite.也能够操作注冊表.读写配置文件. 关于QSettings的使用前面已经介绍过了.比較具体,见" ...
- 4.4系统,拍照-裁剪,resultCode返回0
问题描述: take photo -> 拍照 -> 确定 -> 截图 -> 保存,此时返回给onActivityResult的resultCode是0,截图无效.我查看图片储存 ...
- android-----JNI中的log打印【转】
本文转载自:http://blog.csdn.net/zengraoli/article/details/11644815 1. 导入log头文件 在你使用的 .c/ .cpp 文件中 导入 log. ...
- P3202 [HNOI2009]通往城堡之路 神仙题
这个题不是坑人吗...写个tarjan标签,然后拿这么个神仙题来搞...代码有点看不懂,有兴趣的可以去洛谷题解区看看,懒得想了. 题干: 题目描述 听说公主被关押在城堡里,彭大侠下定决心:不管一路上有 ...
- P3469 [POI2008]BLO-Blockade tarjan
好久没发博客了啊!自我反省1s...今天再捡起来. 这个题是一道有一点特殊的tarjan,用tarjan维护子树大小,然后判断是否有边多次连接,(就是非树边),然后就进行乘法计算就行了. 具体在代码里 ...
- POJ 3264 Balanced Lineup 区间最值
POJ3264 比较裸的区间最值问题.用线段树或者ST表都可以.此处我们用ST表解决. ST表建表方法采用动态规划的方法, ST[I][J]表示数组从第I位到第 I+2^J-1 位的最值,用二分的思想 ...
- 查看mysql是否安装成功和mysql的版本信息
转自:https://blog.csdn.net/hellocsz/article/details/81241204 使用快捷键win+R打开 进入mysql的安装目录下的\bin(本人安装路劲为E: ...
- astgo常见问题(FAQ)知识库
Q:为什么我在astgo 的一些列表页面看不到右侧顶端的高级功能菜单?R:因为你没有先选择代理商,这些操作都是针对于某个代理商才可以操作的! Q:为什么我无法给astgo 的代理商充值?R:因为你登录 ...
- PCB MS SQL 标量函数与表值函数(CLR) 实现文件与目录操作
一.C#写SQL SERVER(CLR)实现文件操作 标量函数: 文件移动 ,复制,检测文件存在,写入新文件文本,读取文本,创建目录,删除目录,检测目录是否存在 /// <summary> ...
- 使用内存流导出Excel
public MemoryStream MemoryStreamDeiveFlowInfoaging(DataTable Table) { Dictionary<int , string> ...