寒假训练--字典树--Message Flood
来源:互联网 发布:mac 16g内存 虚拟机 编辑:程序博客网 时间:2024/06/06 01:06
Message Flood
Time Limit: 1500MS Memory limit: 65536K
题目描述
Well, how do you feel about mobile phone? Your answer would probably be something like that "It's so convenient and benefits people a lot". However, If you ask Merlin this question on the New Year's Eve, he will definitely answer "What a trouble! I have to keep my fingers moving on the phone the whole night, because I have so many greeting message to send!" Yes, Merlin has such a long name list of his friends, and he would like to send a greeting message to each of them. What's worse, Merlin has another long name list of senders that have sent message to him, and he doesn't want to send another message to bother them Merlin is so polite that he always replies each message he receives immediately). So, before he begins to send message, he needs to figure to how many friends are left to be sent. Please write a program to help him. Here is something that you should note. First, Merlin's friend list is not ordered, and each name is alphabetic strings and case insensitive. These names are guaranteed to be not duplicated. Second, some senders may send more than one message to Merlin, therefore the sender list may be duplicated. Third, Merlin is known by so many people, that's why some message senders are even not included in his friend list.
输入
There are multiple test cases. In each case, at the first line there are two numbers n and m (1<=n,m<=20000), which is the number of friends and the number of messages he has received. And then there are n lines of alphabetic strings(the length of each will be less than 10), indicating the names of Merlin's friends, one per line. After that there are m lines of alphabetic strings, which are the names of message senders. The input is terminated by n=0.
输出
For each case, print one integer in one line which indicates the number of left friends he must send.
示例输入
5 3InkfishHenryCarpMaxJerichoCarpMaxCarp0
示例输出
3
来源
第9届中山大学程序设计竞赛预选赛
先将m个字符串建树,再用n个字符串查找重复的,每找到一个num++; 得到要单独发送的
#include <stdio.h>#include <string.h>typedef struct node{ int flag ; node *next[26] ;}*tree;int num ;char str[20001][15] ;void gettree(tree root,char *s){ int i , j , l = strlen(s); tree p = root ; for(i = 0 ; i < l ; i++) { int t ; if(s[i] >= 'a') t = s[i] - 'a' ; else t = s[i] - 'A' ; if(p->next[t]==NULL) p->next[t] = new node() ; p = p->next[t] ; } p->flag = 1 ;}void f(tree root,char *s){ int i , l = strlen(s); tree p = root ; for(i = 0 ; i < l ; i++) { int t ; if(s[i] >= 'a') t = s[i] - 'a' ; else t = s[i] - 'A' ; if(p->next[t]==NULL) { return ; } p = p->next[t] ; } if(p->flag) { num++; }}void freedom(tree p){ int i ; for(i = 0 ; i < 26 ; i++) if(p->next[i] != NULL) freedom(p->next[i]); delete p;}int main(){ int i , n , m ; char s[15] ; tree head; while(scanf("%d", &n)!=EOF && n) { scanf("%d", &m); num = 0 ; head = new node ; head->flag = 0 ; for(i = 0 ;i < 26 ; i++) head->next[i] = NULL; for(i = 0 ; i < n ; i++) { scanf("%s", str[i]); } for(i = 0 ; i < m ; i++) { scanf("%s", s); gettree(head,s); } for(i = 0 ; i < n ; i++) f(head,str[i]); printf("%d\n", n-num); freedom(head); }}
0 0
- 寒假训练--字典树--Message Flood
- Message Flood《字典树》
- Message Flood(字典树)
- 1150 Message Flood 【字典树】
- A - Message Flood(字典树)
- Message Flood(字典树)
- Sicilly 1194 Message Flood(字典树+搜索)
- 字典树——Message Flood
- STL --字典树-- Message Flood-----map
- Message Flood(字典数)
- 寒假训练--字典树--A - Immediate Decodability
- 寒假训练--字典树--B - Compound Words
- 2016寒假训练——字典树
- 2016寒假训练——字典树
- Message Flood 字典树 小心memset的使用
- SDUT 1500 Message Flood(字典树 && 模板)
- SDUTOJ 1500 ——Message Flood 字典树或map
- trie树Message Flood
- Wooden Sticks
- C/C++中自动类型转换的规则
- 数据结构实验之求二叉树后序遍历和层次遍历
- nvidia developer tools
- STL之bitset
- 寒假训练--字典树--Message Flood
- A - Table
- ubuntu软件怎么安装 有那些安装方法 ?Ubuntu 软件安装详解!!
- 工程师制作:耳机放大器制作历程全解
- Phone List
- 友链博客列表
- 全程软件测试实践:从需求到运营
- 宏定义的黑魔法 - 宏菜鸟起飞手册
- 数据结构上机测试4.1:二叉树的遍历与应用1