SDUT1500Message Flood(字典树)
题目链接。
结题报告:
模板题。
我用的动态分配内存。。每一组数据操作完都要释放内存。。否则的话。会Memory Limit Exceeded的。
#include <stdio.h> #include <stdlib.h>#define MAXN 26typedef struct TrieNode{int flag;struct TrieNode *next[MAXN]; }TrieNode;TrieNode *CreateTrieNode(){TrieNode *p;int i;p = (TrieNode *)malloc(sizeof(TrieNode));p->flag = 0;for(i=0; i<MAXN; i++) p->next[i] = NULL;return p; }void InsertTrie(TrieNode **T, char *s){TrieNode *p;if(!(p = (*T))) p = (*T) = CreateTrieNode();int i=0, k;for(i=0; s[i]; i++){if(s[i]>='A' && s[i] <= 'Z') k = s[i] -'A'; //大小写不敏感else k = s[i] - 'a';if(!p->next[k]) p->next[k] = CreateTrieNode();p = p->next[k];}p->flag = 1; }int SearchTrie(TrieNode *T, char *s){TrieNode *p;if(!(p = T)) return 0;int i, k;for(i=0; s[i]; i++){if(s[i] >= 'A' && s[i] <= 'Z') k = s[i] - 'A';else k = s[i] - 'a';if(!p->next[k]) return 0;p = p->next[k];}if(p->flag){p->flag = 0; return 1;}else return 0; }void ReleaseTrie(TrieNode *T){ //释放内存int i;for(i=0; i<MAXN; i++){if(T->next[i]) ReleaseTrie(T->next[i]);T->next[i] = NULL;}free(T); }int main(){TrieNode *T;int n, m, i, cnt;char s[20];while(scanf("%d", &n) == 1 && n != 0){scanf("%d", &m);cnt = 0; T = NULL;for(i=0; i<n; i++){scanf("%s", s);InsertTrie(&T, s);cnt++;}for(i=0; i<m; i++){scanf("%s", s);if(SearchTrie(T, s)) cnt--;}printf("%d\n", cnt);ReleaseTrie(T);}return 0; }
转载于:https://www.cnblogs.com/tanhehe/archive/2013/02/20/2918099.html
SDUT1500Message Flood(字典树)相关推荐
- oj1500(Message Flood)字典树
大意:输入几个字符串,然后再输入几个字符串,看第一次输入的字符串有多少没有在后面的字符串中出现(后输入的字符串不一定出现在之前的字符串中) #include <stdio.h> #incl ...
- hdu5296 01字典树
根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...
- BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...
- 2014百度之星 Xor Sum(字典树+贪心)
题目在HDU_OJ Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometh ...
- HDU6964 I love counting (字典树+莫队)
题意: 给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b.k ...
- Beautiful Subarrays (01字典树 瞎搞)
题意: 题解: 一看问的是子序列,并且还是异或. 首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧. 假设01字典树往左边是0右边是1 ...
- CF888G Xor-MST (01字典树+MST)
题意: 给你n个数,每个数有一个值. 问你这n个数的最小生成树为多少,两点之间的边权为异或值. 题解: 参考了洛谷上的一个题解,总觉得这样的时间复杂度会爆炸,但是确确实实没爆炸. 我们每次去合并两个点 ...
- Perfect Security (01字典树删除点)
题意: 第一行给你一个n 第二行给你n个数字 分别是a[1],a[2]-a[n]. 第三行给你n个数字 分别是b[1],b[2]-b[n]. 问:第三行的序列可自由排列,要求排列之后的顺序 a[1] ...
- Vitya and Strange Lesson (01字典树)
题意:给定一组数,然后对所有的数进行异或操作m次异或操作,问你每次操作后,没有出现过的最小的非负整数 题解: 首先需要一个性质(ab)c=a(bc); 所以我们没有必要对于所有的数进行异或操作. 我们 ...
- 奶牛异或(01字典树)
题意: 让你找一个连续区间异或和最大,如果有相同的,则输出断点较小的. 题解: 01字典树,利用前缀和的思想进行求解,我们在插入前缀的同时,也在不断的更新最大值. 我们查询当前 二进制字符串与已经插入 ...
最新文章
- C++ 函数--幽径初探索
- JVM之类加载器ClassLoader
- 创建下标为1-10的整形数组
- 深耕“工业互联网”,华为云持续开花
- Windows下打开Url 代码封装 C++
- Github html文件在线预览方法
- 【数据分享】错颌畸形生长患者治疗数据集
- zookeeper保证单一视图
- 证:单层感知机不能表示异或逻辑
- 为笔记本添加固态硬盘以及之后的分区方法分享
- 计算机专硕_2021年北京科技大学计算机专硕考研初复试考研经验分享、择校备考分析指导...
- 用有限差分和牛顿法解非线性微分方程(边值问题)-python
- 文档中的文字太紧凑,word行间距怎么调整?
- 数值计算笔记之迭代法的收敛性
- java-jsp-nutz基础周测
- Google登录和facebook登录相关
- 用C语言比较三个数的大小
- 阿里Java面试必问:java爬虫框架使用排行
- mongodb---foursquare
- 怎么生成windows上的ico图标