码迷,mamicode.com
首页 > 其他好文 > 详细

字典树

时间:2020-10-05 21:52:27      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:const   在家   内存   bool   没有   include   span   scan   tmp   

2020.10.02

学字典树几天了,但还是做不出什么题目。但好歹能看懂别人的代码,这么弱的我只能靠这样来一点点进步了。

国庆在家写代码的节奏也放慢了,没有学校里机房里效率高。虽然平时机房里也没几个人。

虽然我真的很弱,但我真心希望自己和身边的人都能够变强,能一起努力,一起在机房熬夜。或许这样我才能更加奋进。

 

这算是个最基础的模板吧

 1 int tot = 0;//写init()的话记得重置这个
 2 int t[maxn][26];//字母の树
 3 
 4 void insert(string s)// char *s
 5 {
 6     int p = 0;
 7     int len = s.size();
 8     //strlen(s)
 9 
10     for(int i = 0 ; i < len ; i++){
11         int son = s[i] - a;//找儿子
12         if(!t[p][son]){
13             t[p][son] = ++tot;
14         }
15         .........
16         p = t[p][son];
17         .........
18     }
19 }            

主要做了几道题,坑点还是蛮多的。

1.内存问题

开maxn之前建议根据题目要求计算一下max(maxn),避免首发RE,太吃亏

 

2.字符串

处理字符串一定要注意,用strlen还是.size,传函数的时候用string还是char*,这些都是要注意的点,虽然极为基础。

字符串读入 cin ? gets() ? scanf() ?

 

3.自定义结构体的cmp

 1 struct node{
 2     int num;
 3     int val;
 4     string ss;
 5 };
 6 
 7 node data[maxn];
 8 
 9 bool cmp(const node &a, const node &b)//(node a, node b)
10 {
11     if(a.num == b.num){
12          return a.val < b.val;
13     }
14     return a.num < b.num;
15 }

poj2408这道题就吃了大苦头,如果第9行写成注释文字,你将会TTTTTTTTTLE

HY:别问为什么

 

4.程序问题/读题问题

昨天想啃一道题,HY大佬说是铜牌题,没想那么多,读了题发现好像有点思路就写了。

样例也过了,搞了半天还是WA。事实上是读题出现了问题。题目要求累加权值的操作我并没有做。虽然还是要看别人的题解才能写对,但读题正确与否直接影响自己和队友对题的认知,关系到成绩。

 

5.低级错误

有些东西不是想当然的,不知道是不是跟我的性格有关系,我容易犯下一些低级错误。

poj1451 手机按键,对应的键盘字串22233344455566677778889999,少写了一个7直接WA。想想说不过去。

 

6.STL

最近学字典树才真正深入字符串,很多基于STL的操作需要熟练掌握

 1 string str = "";
 2 str += s[i];
 3 //极为基础
 4 
 5 #include<set>
 6 set<string, int> s1;
 7 set<string, string> s2;
 8 //通过set建立字符串与数字、字串之间的映射,能够解决很多问题
 9 //参见poj1451,s1用于记录原字串转化为数字串后映射的节点权值
10 // s2则用于记录该数字串对应节点悬挂的最优解字符串,即为所求
11 
12 //当你想用printf()输出string类的字符串,切记.c_str()
13 string tmp;
14
if(!s2.count(tmp)) printf("MANUALLY\n");//set的.count()查询其size
15 else printf("%s\n",s2[tmp].c_str());

还有就是这个迭代器?iterator

1 set<string>::iterator it;//定义迭代器
2 for(it = s2.begin() ; it != s2.end() ; it++){//注意判断条件应为!=
3     printf("%s\n",(*it).c_str());//迭代器指向元素为string类型
4 }

 

目前就这样。

加油

回顾了那篇文章,我或许做不到一个月睡六天,每天两小时睡眠,但我会坚持下去的。

人生这种东西,说来也好笑,你努力一辈子创造的东西,在你死后什么都没了。

我不太了解基督教和佛教,凭我的认知更不能确认它的存在与否,或许我是无神论者。

我不知道人死后会不会转生,更不知道人的意识是否会消亡。

从自我的角度来说,我们一生所做的不过是一次庞大的游戏,只是不能复活,从宇宙的角度你甚至可以评判它为毫无意义,在宇宙消亡的那一刻我们都将化为灰烬。

你大可以嘲笑我的弱小,笑我的无能,笑我无意义,这么没能力,脑子也不聪明还要搞什么ACM。

但我还是要努力,因为我害怕以后再没有这样的机会让我奋斗了。

我害怕自己后悔,大学为什么没努力,怕自己年迈时抱怨自己的无能。

我的一生或许没什么价值,但不这样做,就显得更没有意义了。

这是我第一次感受到足以撼动我人生观的决定。

22:58

字典树

标签:const   在家   内存   bool   没有   include   span   scan   tmp   

原文地址:https://www.cnblogs.com/ecustlegendn324/p/13763054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!