hdu--1075--字典树||map
做这题的时候 我完全没想到 字典树 就直接用map来做了 =-=
我是有 多不 敏感啊~~
然后去 discuss 一看 很多都是说 字典树的问题....
字典树 给我感觉 它的各个操作的意思都很清晰明了 直接手写 不那么容易啊。。
晚些 时候 试下来写------用map写是真心方便 只要注意下那么\n的吸收之类的 但是 速度上是的确慢了许多 基本要卡1000ms 虽然这题是给了5000ms 怎么给那么大的时间
touch me
1 #include <iostream> 2 #include <map> 3 #include <string> 4 using namespace std; 5 6 map<string,string>mp; 7 string str; 8 string str1; 9 string str2; 10 string sen; 11 12 int main() 13 { 14 cin.sync_with_stdio(false); 15 mp.clear(); 16 cin >> str;// start 17 while( cin>>str1 && str1!="END" ) 18 { 19 cin >> str2; 20 mp[str2] = str1; 21 } 22 getchar(); 23 getline(cin,str);// start 24 while( getline(cin,str1) && str1!="END" ) 25 { 26 sen = ""; 27 int len = str1.length(); 28 for( int i = 0 ; i<len ; i++ ) 29 { 30 if( str1[i]>='a' && str1[i]<='z' ) 31 { 32 sen += str1[i]; 33 } 34 else 35 { 36 if( sen!="") 37 { 38 if( mp.find(sen)!=mp.end() ) 39 cout << mp[sen]; 40 else 41 cout << sen; 42 } 43 cout << str1[i]; 44 sen = ""; 45 } 46 if( i==len-1 && (str1[i]>='a'&&str1[i]<='z') ) 47 { 48 if( sen!="" ) 49 { 50 if( mp.find(sen)!=mp.end() ) 51 cout << mp[sen]; 52 else 53 cout << sen; 54 } 55 } 56 } 57 cout << endl; 58 } 59 return 0; 60 }
View Code
--------实在懒得敲代码...昨天的搁到今天刚刚才写好
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 const int size = 26; 6 const int num = 15; 7 char str[num]; 8 char str1[3010]; 9 char str2[num]; 10 char str3[num]; 11 char str4[num]; 12 typedef struct trie 13 { 14 trie* next[size]; 15 char ans[num]; 16 }; 17 trie root; 18 19 void init( ) 20 { 21 root.ans[0] = '\0'; 22 for( int i = 0 ; i<size ; i++ ) 23 { 24 root.next[i] = NULL; 25 } 26 } 27 28 void create( char* str1 , char* str2 ) 29 { 30 int len = strlen(str1); 31 trie* p = &root; 32 trie* q; 33 for( int i = 0 ; i<len ; i++ ) 34 { 35 int id = str1[i] - 'a'; 36 if( p->next[id] == NULL ) 37 { 38 q = new trie; 39 q->ans[0] = '\0'; 40 for( int i = 0 ; i<size ; i++ ) 41 { 42 q->next[i] = NULL; 43 } 44 p->next[id] = q; 45 } 46 p = p->next[id]; 47 } 48 strcpy( p->ans , str2 ); 49 } 50 51 char* find( char* str ) 52 { 53 int len = strlen(str); 54 trie* p = &root; 55 for( int i = 0 ; i<len ; i++ ) 56 { 57 int id = str[i] - 'a'; 58 if( p->next[id] == NULL ) 59 return str; 60 p = p->next[id]; 61 } 62 if( strlen(p->ans) ) 63 return p->ans; 64 else 65 return str; 66 } 67 68 void dealTrie( trie* T ) 69 { 70 if( T == NULL ) 71 { 72 return; 73 } 74 for( int i = 0; i<size ; i++ ) 75 { 76 if( T->next[i] != NULL ) 77 { 78 dealTrie( T->next[i] ); 79 } 80 } 81 delete T; 82 return; 83 } 84 85 int main() 86 { 87 int cnt , len; 88 init(); 89 scanf( "%s",str ); 90 while( scanf( "%s",str1) && strcmp(str1,"END") ) 91 { 92 scanf( "%s",str2 ); 93 create( str2 , str1 ); 94 } 95 scanf( "%s",str ); 96 getchar(); 97 while( gets(str1) ) 98 { 99 if( !strcmp(str1,"END") ) 100 { 101 dealTrie(&root); 102 break; 103 } 104 cnt = 0; 105 str4[cnt] = '\0'; 106 len = strlen(str1); 107 for( int i = 0 ; i<len ; i++ ) 108 { 109 if( str1[i]>='a' && str1[i]<='z' ) 110 { 111 str4[cnt++] = str1[i]; 112 } 113 else 114 { 115 str4[cnt] = '\0'; 116 cout << find(str4); 117 cnt = 0; 118 printf( "%c",str1[i] ); 119 } 120 if( i==len-1 && ( str1[i]>='a' && str1[i]<='z' ) ) 121 { 122 str4[cnt] = '\0'; 123 cout << find(str4); 124 } 125 } 126 cout << endl; 127 } 128 return 0; 129 }
View Code
关于 字典树 分 静态 和 动态版本 我还是个人倾向于动态的 写起来方便啊...虽然会 内存大点 时间慢点 一般应该是能过的吧
today:
祝天下有情人皆是失散多年的兄妹
------希望如愿
转载于:https://www.cnblogs.com/radical/p/3887096.html
hdu--1075--字典树||map相关推荐
- hdu 1298 字典树 + DFS (模拟T9文本输入)
题意: 给你一些按键顺序,让你输出每一步中概率最大的那个单词,这里的概率计算方 法好好看看别弄错了,一开始就是因为弄错了,各种wa,比如 abc 1 ,ab 1,那么 ab 的概率就是2 ...
- CodeForces - 858D Polycarp's phone book(字典树/map)
题目链接:点击查看 题目大意:给出n个电话号码,每个电话号码都由9位数字组成,我们需要输出每个电话号码的最小关键词,最小关键词是指当输入这个关键词后,只能与当前的电话号码的其中一段匹配,而不能和其他电 ...
- Prefix HDU - 5790 字典树 + 主席树
传送门 文章目录 题意: 思路: 题意: 给你nnn个串,每次询问一个区间,返回这个区间的串的不同的前缀个数,强制在线. 思路: 碰到字符串前缀的问题,我们自然的想到用字典树来解决. 对于每个串,我们 ...
- hdu 4099 字典树 + 斐波那契
题意: 给你一个串(最长40位)问你这个串是斐波那契F(n) n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路: 给的串最长40位,那 ...
- HDU 1800(字典树)
简单的字典树水题,统计为单词前缀的单词数,取最大,注意要去前0,具体原理还是自己想想吧,最大数决定了最大分组. 诶 PKU月赛之后 我发现我只会水的 .............. #include&l ...
- HDU 5536 字典树
题意:就是公式. 这现场赛O(n^3)能过,觉得太没天理了. 做法:字典树,枚举两个数,然后在字典树上贪心的跑. #include <bits/stdc++.h>using namespa ...
- HDU 5687 字典树入门
Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- hdu 1247 字典树
题意:给你一部分单词,让你找出所有这样的单词:a+b=c,就是一个单词,由另外两个单词串联而成 解题思路:先输入全部单词,构建一棵tire树,然后枚举所有单词,对单词进行查找,查找过程中经过的单词节点 ...
- hdu 1251 字典树,指针版
这题内存需求很大,我用静态数组写的trie总MLE,看discuss说50w的数组才过,但我一开50w的就MLE了啊--想不通 这是链表版的trie,1个case,所以也不用考虑内存释放什么的 #in ...
- hdu 1075 (字典树映射)
/*问题:输入一段英文,对照给的单词的映射,输出映射后的字符串YY :典型的字典树问题,先处理好映射表,在一映射单词结尾处记录与之对应的单词,后面字符串处理一下,单个单词进行查,找到后输出,没有输出原 ...
最新文章
- java bank项目答案_Java基础实战Bank项目01-04
- RedisDesktopManager客户端可视化工具下载安装与使用
- WEBMIN里添加VSFTP控制模块
- React 15.5带来重大修改
- [渝粤教育] 西北大学 数据结构 参考 资料
- java ee 6 源码_Java EE 6开发手册·高级篇(第4版)
- php psr 什么意思,PHP的PSR系列规范都有啥内容,phppsr规范有啥_PHP教程
- 联想微型计算机怎么开盖,联想C4030一体机怎么拆后盖加内存?
- 算法:冒泡排序、一阶滤波
- [JBoss] JNDI与JBossNS
- 分辨率测试靶-标定显微镜、相机等光学系统的分辨率
- 麦克风阵列语音增强(一)
- [解决方法] 连接深信服Easyconnect之后无法代理抓包
- Pytorch 深度学习结果无法复现的解决办法
- JuJu团队12月4号工作汇报
- 项目管理证书PMP的含金量真有那么高?
- golang 小trick
- 微信小程序游戏跳一跳模拟
- Unity技术-开发规范
- Linux挂载命令mount用法及参数详解
热门文章
- pjsip for Android的编译
- 天弘余额宝4月10日起全面解除限购,你还会选择天弘余额宝吗?
- ue4 无限地图_UE4大地图(流关卡、无缝地图)
- react登录页面_React 实现路由拦截
- python counter_教你Python的collections.Counter类型
- visual studio 设计器不显示_与城共生:南京朝天宫“参与性”城市设计
- 无法在源表中获得一组稳定的行_行输出变压器的结构、符号及电路分析
- html5图像映射坐标怎么看,如何将AxesImage中的坐标映射到已保存图像文件中的坐标?...
- python程序如何封装成接口_python接口自动化如何封装获取常量的类
- api有哪些 javasocket_socket及socket java api