11月4日学习记录

1.11月4日的贪心记录与总结(见博客)

2.终于结束的起点:
更新fib时若数据过大,只需要记录3个变量来计算某一位fib值
注意fib很容易爆掉,一定开long long,且取模运算见代码,防止溢出(题目要求取模)

3.关于字符串的一些操作:
  1.map:做了潜伏者:map一个经常在字符串中的用途就是作为bool的出现,起到和哈希一样的作用。
               (然而本人哈希并不熟练,且map操作简便,虽然慢,但考场将优先选择)
               注意使用细节:map<string,bool>vis; vis[s]=1; 易错:map<string,bool>vis[maxn]直接定义vis即可,这是一个集合(关联式容器)
         

  2.substr:做了“字串变换”:substr在拼接问题中使用:string kk=str.substr(0,i); 你可以获取字符串str从0位置
                 到i-1位置的字串,这个字串由kk记录保存。string kk=str.substr(i);你可以获取字符串str从i位置到长度
                 结尾的子串,并由kk来记录并保存。
                 
                 Tip:关于具体的字符串拼接问题见该题面:
                  1.你可以学到字符串若想直接拼接:ans+=str.substr(0,i);其实就是在ans的尾部街上新的构造子串
                  2.关于如何拼接:(题面)串a,串b。你需要通过下列操作将a变为b
                                            下列将有诸多的操作:对于每个操作,你可以将子串1转化成子串2
                                            所以关键在于如何模拟拼接:即对于a的每一个位置判断,是否可以进行诸多操作中的一种
                                            之后再搜索
                  3.关于本题的搜索选择 以及 bfs的new剪枝:
                     本题要求找到最短的转化次数->就是bfs
                     @@@@@@:请仔细思考,这就是最短路问题。你很难用dfs来实现,已经写过实现不了
                     本题用到了bfs剪枝:如果当前状态的子串已经存在过了就返回上一个状态    
                   
                 4.关于本题一定注意学到了最重要的知识时不定向读入:
                    while(cin>>a[n]>>b[n]) n++; 其他形式会读入不全或读入错误,你可能觉得不可思议:
                    n=0; while(cin>>a[++n]>>b[n]); or while(cin>>a[n++]>>b[n]);  但这样写就是会读入错误
                 
                5.在bfs过程中使用了结构体对列,因为我们需要知道某一个子串,变化到这一步所需要的步数。这其实大大帮助我们存储更多的变量与参数
3.要求:复习单词接龙                 
          

猜你喜欢

转载自www.cnblogs.com/79707536wc/p/9911429.html