做这题的时候 我完全没想到 字典树 就直接用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相关推荐

  1. hdu 1298 字典树 + DFS (模拟T9文本输入)

    题意:       给你一些按键顺序,让你输出每一步中概率最大的那个单词,这里的概率计算方 法好好看看别弄错了,一开始就是因为弄错了,各种wa,比如 abc 1 ,ab 1,那么 ab 的概率就是2 ...

  2. CodeForces - 858D Polycarp's phone book(字典树/map)

    题目链接:点击查看 题目大意:给出n个电话号码,每个电话号码都由9位数字组成,我们需要输出每个电话号码的最小关键词,最小关键词是指当输入这个关键词后,只能与当前的电话号码的其中一段匹配,而不能和其他电 ...

  3. Prefix HDU - 5790 字典树 + 主席树

    传送门 文章目录 题意: 思路: 题意: 给你nnn个串,每次询问一个区间,返回这个区间的串的不同的前缀个数,强制在线. 思路: 碰到字符串前缀的问题,我们自然的想到用字典树来解决. 对于每个串,我们 ...

  4. hdu 4099 字典树 + 斐波那契

    题意:       给你一个串(最长40位)问你这个串是斐波那契F(n)  n <= 99999中的那个数的前缀,如果存在多个输出最小的n否则输出-1. 思路:       给的串最长40位,那 ...

  5. HDU 1800(字典树)

    简单的字典树水题,统计为单词前缀的单词数,取最大,注意要去前0,具体原理还是自己想想吧,最大数决定了最大分组. 诶 PKU月赛之后 我发现我只会水的 .............. #include&l ...

  6. HDU 5536 字典树

    题意:就是公式. 这现场赛O(n^3)能过,觉得太没天理了. 做法:字典树,枚举两个数,然后在字典树上贪心的跑. #include <bits/stdc++.h>using namespa ...

  7. HDU 5687 字典树入门

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

  8. hdu 1247 字典树

    题意:给你一部分单词,让你找出所有这样的单词:a+b=c,就是一个单词,由另外两个单词串联而成 解题思路:先输入全部单词,构建一棵tire树,然后枚举所有单词,对单词进行查找,查找过程中经过的单词节点 ...

  9. hdu 1251 字典树,指针版

    这题内存需求很大,我用静态数组写的trie总MLE,看discuss说50w的数组才过,但我一开50w的就MLE了啊--想不通 这是链表版的trie,1个case,所以也不用考虑内存释放什么的 #in ...

  10. hdu 1075 (字典树映射)

    /*问题:输入一段英文,对照给的单词的映射,输出映射后的字符串YY :典型的字典树问题,先处理好映射表,在一映射单词结尾处记录与之对应的单词,后面字符串处理一下,单个单词进行查,找到后输出,没有输出原 ...

最新文章

  1. java bank项目答案_Java基础实战Bank项目01-04
  2. RedisDesktopManager客户端可视化工具下载安装与使用
  3. WEBMIN里添加VSFTP控制模块
  4. React 15.5带来重大修改
  5. [渝粤教育] 西北大学 数据结构 参考 资料
  6. java ee 6 源码_Java EE 6开发手册·高级篇(第4版)
  7. php psr 什么意思,PHP的PSR系列规范都有啥内容,phppsr规范有啥_PHP教程
  8. 联想微型计算机怎么开盖,联想C4030一体机怎么拆后盖加内存?
  9. 算法:冒泡排序、一阶滤波
  10. [JBoss] JNDI与JBossNS
  11. 分辨率测试靶-标定显微镜、相机等光学系统的分辨率
  12. 麦克风阵列语音增强(一)
  13. [解决方法] 连接深信服Easyconnect之后无法代理抓包
  14. Pytorch 深度学习结果无法复现的解决办法
  15. JuJu团队12月4号工作汇报
  16. 项目管理证书PMP的含金量真有那么高?
  17. golang 小trick
  18. 微信小程序游戏跳一跳模拟
  19. Unity技术-开发规范
  20. Linux挂载命令mount用法及参数详解

热门文章

  1. pjsip for Android的编译
  2. 天弘余额宝4月10日起全面解除限购,你还会选择天弘余额宝吗?
  3. ue4 无限地图_UE4大地图(流关卡、无缝地图)
  4. react登录页面_React 实现路由拦截
  5. python counter_教你Python的collections.Counter类型
  6. visual studio 设计器不显示_与城共生:南京朝天宫“参与性”城市设计
  7. 无法在源表中获得一组稳定的行_行输出变压器的结构、符号及电路分析
  8. html5图像映射坐标怎么看,如何将AxesImage中的坐标映射到已保存图像文件中的坐标?...
  9. python程序如何封装成接口_python接口自动化如何封装获取常量的类
  10. api有哪些 javasocket_socket及socket java api