思路:

  • 知道什么东西在变化,什么东西没有变化。

关于超时(cf上大概能跑1e8):

  • 写之前先算算复杂度,如果n2超时了,那可以考虑一下nlog(n),用二分可以降低复杂度
  • 当可以由一个东西或者两个东西确定另外一个东西的时候,我们最优办法是直接得到我们要的东西,然后看总量中是否存在这样一个东西,而不是分别遍历每一个元素,再判断其是否符合条件,这样就可以降低一个O(n)的复杂度。
  • a^a=0
  • stackvector都可以在递归函数中调用,用以保存数组,stack处理时间长(约为vector2倍),但空间小,vector处理时间快,但空间大(约为stack的10倍)
  • 对于模进之类的思维题,最好是for循环里面套一个while,这样出错率低
  • 当递归的规模很大,并且有很多重复运算的时候,可以采用记忆化
  • 对于一个东西,如果它可以单调性的话,考虑使用二分,或者实在想不出别的解决办法,直接二分答案
  • 在面对数学问题的时候,可以考虑解方程,来简化运算,并且得到思路
  • 从很多边中选三条边构成三角形,最优解是相邻三条边(a[i1]<=a[i]<=a[i+1]),对该问题的证明是:先固定住最小边a[i1],来看剩下两条边,要使两边之和大于第三边,两边之差小于第三边,最优的办法说使这两个数尽可能大,并且这两个数一定要挨在一起,这样才能使两边之差最小,而要让最小边大于两边之差的最优解也是正好与这两个数相邻,且小于它们,因此最优解就是相邻的三条边。
  • 从一个数 n(不能被10整除) 变成末尾有几个0的数,要想到的一点是,10只能由2和5变成,先看 n 里有几个2或者几个5(两者不能同时存在,不然 n 里就会有10了),然后用5把2变成10,用2把5变成10。
  • 如果是求一段区间l~r内的值,可以考虑用一个函数f(x)求出求出1~x的答案,那么最后的结果就是f(r)-f(l-1)
  • 进行四舍五入的操作,例如对 x 保留2位有效数字round(x*100)/100
  • 对于暴力题,如果实在想不出啥其他很神的办法的话,那么就应该去思考怎么去优化它的计算,减少重复计算
  • 对于0011011000111,如果我们要删去0使得1都在一块,那么我们不必去求夹在1中间的0的个数,最便捷的方法是求1的最左端和最右端,再统计最左端和最右端之间0的个数即可。
  • 对于一些有单调性的数学问题,如果直接计算很麻烦的话,不如考虑一下二分答案,然后check一下看是否满足要求
  • 把数据列出来有利于看出规律,不要一股脑的只用脑袋想
  • 特别是对于数学问题,当正面计算很复杂的时候,尝试一下用总的方案数减去不符合条件的方案数,说不定会简单些,这是利用的容斥的思想。
  • Python内置的pow(x,n,mod)函数的复杂度是O(log(n)),甚至比快速幂还要更快
  • Debug方法之一 —— 判断边界数据是否可行。
  • 可以由最终结果在有限的步骤之内推出可能的起始状态。
  • 对于字符串问题,如果对于下标进行操作复杂度很大的话,可以考虑对字母进行操作,这样计算复杂度的时候就是对26进行计算了。
  • 通过数据范围,揣测复杂度的可能构造方式。

语法:

  • memset只能用于初始化数组为01,其他的可能会出错,最好用forfill(begin,end,value)函数也可以。

  • 动态开辟数组:

    vector<vector<int> > a(n+5,vector<int>(m+5));
    

    相当于a[n+5][m+5]

  • vector<int> a; (int)a.size() 要加int转化不然就有可能出错,因为size型的变量不可能有负的,所以当size-a<0时,就会出错,所以此时应该需要强转

  • 优先队列默认top()是最大值,如果写成priority_queue<int,vector<int>,greater<int> > top()则为最小值

  • 在用位运算的时候一定要记得打括号,不然会出错,例如1^1+1它不是等于1,而是3,所以正确写法应该是(1^1)+1

  • 如果优先队列中存的是自定义的结构体,那么就需要重载结构体的运算符,该运算符应该定义为全局的,不要放在结构体内部

注意事项:

  • 要记得看数据大小,用long long 还是int,并且long long 的无穷要足够大
  • 在对照别人的代码写的时候,如果出现很难找的 bug,解决方法是先理解代码的思路,然后把自己写的代码按照这个思路看一遍下去,看看能不能发现什么错误。
  • 注意特殊数据的判断
  • 互质指的是两个数的公约数只有1
  • 写 bfs 的时候要注意的一点:要在 push 新状态的时候就将其 vis[]置为1,不要等到遍历的时候再置为1,不然会重复遍历,最后导致内存超限。
  • 快速幂的终止条件应该写为n>0,不然有些地方可能会卡住。
posted @ 2020-01-31 23:08 caoanda 阅读(91) 评论(0) 推荐(0) 编辑
摘要: "常用数学符号的 LaTeX 表示方法" 阅读全文
posted @ 2019-09-08 14:20 caoanda 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 考虑到白天去实验室工作,晚上又要回寝室,文件传输会很麻烦,于是寻求能够方便进行文件远程同步的方案。 1. 使用工具 内网穿透:zerotier(全平台均可) 文件同步(备份)工具:FreeFileSync(Windows,macOS,Linux) 1.1 zerotier 官网:https://my 阅读全文
posted @ 2022-10-21 13:23 caoanda 阅读(881) 评论(0) 推荐(0) 编辑
摘要: 1002 多项式系数为0时,不用输出。一部分原因是因为不认识polynomials(多项式)这个单词 1004 以“01”为根。读题要仔细,PAT的题目给我的感觉是,会考一些细节的地方。 1005 不要忘记边界值0。细节,还是细节。 1010 可以利用python的int(x,radix)函数进行进 阅读全文
posted @ 2021-09-28 11:27 caoanda 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 1001 Battle Over Cities - Hard Version 思路:暴力跑每一个点作为被侵略点的情况,求最小生成树即可。 需要注意的情况是,虽然题目说最一开始的时候图是联通的,但是要注意,当一个点被侵略的时候,图可能就不连通了,所以需要判定一下,不连通的情况置为 inf。 // Cr 阅读全文
posted @ 2021-05-18 16:07 caoanda 阅读(121) 评论(0) 推荐(0) 编辑
摘要: SP10707 COT2 - Count on a tree II 参考:树上莫队 树上莫队和普通的莫队差不多,只是把区间从普通的数组,转到欧拉序上(其实也就是括号序) 该问题求解的是 x,y 两个点之间的最短路径上,有多少个不同颜色的点 对于这个问题,分两种情况讨论 \(lca(x,y)=x\ o 阅读全文
posted @ 2021-05-08 13:47 caoanda 阅读(77) 评论(0) 推荐(0) 编辑
摘要: P1903 [国家集训队]数颜色 / 维护队列 带修莫队模板题 增加了一维时间轴,表示当前的状态,就是然后就是三维莫队的写法了,对l进行分块之后,对r进行分块,然后再对t进行排序即可。 // Created by CAD #include <bits/stdc++.h> using namespac 阅读全文
posted @ 2021-04-29 14:55 caoanda 阅读(86) 评论(0) 推荐(0) 编辑
摘要: G 男神zyh的青睐 这道题与普通的莫队不一样的地方是,普通的莫队是求一个[l,r]区间里面的贡献,但是这道题需要求两个区间贡献之间的积。 普通的莫队是二维的,对左端点进行分块,然后再在块内对右端点进行排序,复杂度为O(n32)。 但是本题的莫队是三维的,对左端点进行 阅读全文
posted @ 2021-04-27 20:03 caoanda 阅读(89) 评论(0) 推荐(0) 编辑
摘要: P1972 [SDOI2009]HH的项链 莫队模板题,但是有点点卡常,需要用一些技巧进行优化 (1)奇偶优化 (2)快读快写 (3)把块的大小开大一点取n0.5+效果会好一些 (4)把 add 和 del 函数展开,不以函数的形式,会块一点点,但并不会快太多 // Created by 阅读全文
posted @ 2021-04-26 15:13 caoanda 阅读(73) 评论(0) 推荐(0) 编辑
摘要: D. Explorer Space 一点一点把题目理顺。看看哪些是可以推断出来的。 对于 dp 的题目而言,要一点一点去分析其中什么东西是可以递推的,正如这道题中 dp[x][y][k]=min{dp[xx][yy][k1]+d[x][y][i]} 然后再进行记忆化搜索即可。 // C 阅读全文
posted @ 2021-04-25 23:24 caoanda 阅读(123) 评论(0) 推荐(0) 编辑
摘要: D - Cut 对于一道题目,如果没有别的想法,那么就可以先从它的朴素解法入手,然后再想能不能找到优化它的方法。 对于这道题而言,朴素的解法就是用一个数组来维护每一个位置失配的最远位置,可以开一个数组fail[maxn]进行记录。但是在最极端的情况下,每次查询会被卡成O(n)的,所以,这个地 阅读全文
posted @ 2021-04-22 16:29 caoanda 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 2021.04.21 很久没有记录过自己的心情了,距离上次Record Feeling已经过去快一年了,这一年也发生了太多太多。 如果没有那个寒假的坚持,我可能早就结束了吧。也有可能另谋出路了,现在再看来,只要在一条路上坚持走下去,也一定会有很多收获的。不管是当时fj说要带我做项目,还是现在的acm 阅读全文
posted @ 2021-04-21 14:00 caoanda 阅读(86) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示