大问题
- 游荡的奶牛(爆搜):把判断越界的条件写在搜索里面要比单独写一个check函数再调用要快......
- 潜伏者(模拟):做模拟时要一个一个条件认真看清楚了,不要遗漏......
- 清北考试easy(DP):取模有一定的意义,有的时候整个题目在取模意义下,也不是所有数都要取模
- 清北考试 haha math(暴力分):要计算数组大小,int 可以开5000*5000,但long long double都是8字节的,开5000*5000会超过128M
以后每次开数组都要计算大小,不论多么熟悉,1024 B(字节)=1KB 1024 KB=1MB
- USACO浇地 并查集不能 if(find(u)!=find(v)) 要 if(fu!=fv)
- 换教室(期望,递推):double不能设成0x7f7f7f7f但可以1e8
- 换教室(期望,递推):要注意设初值时map[i][i]要特别设
- 激光炸弹(二维前缀和):128M就要小心,两个5000*5000的int数组也会MLE
- q(暴力):有时暴力的范围太小,再大些也能过,这时可能测试数据中暴力的数据更大些,如果正解打不出,不要if(n<=.....)直接上暴力就可以了
- 愤怒的小鸟(搜索/状压):double判断精度,不能用==,用fabs(a-b)<1e-8......
- 愤怒的小鸟(搜索/状压):在用公式的时候,注意不要除以0
- (图论,DFS)搜到答案的时候如果没有特殊性质,要return
- term(数论):快速幂不要忘记ret*=a后要取模
- HH的项链(树状数组,离线处理):node[i]={Node}(l,r,i)如果Node里面有4个值,这样是错误的
- HH的项链:数组要开大一些,虽然题目给了1e5但可能要开1e6
- 油滴扩展(模拟,全排列):#define pai 3.1415926不要手抖打错了
- 油滴扩展:round(ans)有时会返回一个.....e.....加上int (int)round(ans)就不会有这种情况,floor round返回值都是double
- 路障(次短路模板):除了要记录每个点的次短路外,还要枚举最短路上的每条边,加上其两倍求最小
- 火柴排队(思路题,归并排序):在函数内不能定义long long的数组,只可以定义int的数组
- 种树(思路题 sweet)while(vis[q.top().id]) q.pop();是对的 但while(...) int u=q.top().id;q.pop(); if(vis[u]) continue;是错的
- 钟浩曦:400w 1s刚刚好
- DEV (CE):没有引用某一个库,但是编译过了----> 多写库,最后编译代码到别的地方
- algorithn定义好了 : x1,y1,x2,y2,next 会CE --> X1,Y1,X2,Y2 / 后面加个下划线
- long long的输出:WIN32:%I64d Linux:%lld WIN64:%lld/%I64d
- 根据数据范围猜算法:
1e18 O(1) O(log)
1e12 O(sqrt(n)) O(sqrt(n)logn)
1e6 O(n) O(nlogn) 常数小
1e5 O(nlogn) O(nsqrt(n))
2e5 5e5 卡常 O(nlog^2n) O(nsqrt(n))
5e4 O(nsqrt(n)logn)
1000 n^2
100 n^3
22 状压 2^22 400w //1s刚刚好
10 O(n!)
- long doublescanf("%Lf",&x) 不是任何编译器都可用①cin 不一定靠谱② double y scanf("%lf",&y)x=y;输出:存给double 再输出不会损失精度 long double x
- pow(e,x) pow类型是double 会损失精度 用powl是一个用long double expl logl都是支持long double pow用来求小数次幂
- double保存到第几位是向下,而不是四舍五入
- long long 在WIN32下跑的很慢,不要全文都用long long
- 数据清0和初始化:memset只能赋一些特别的值:0,-1,0x3f3f3f3f 不能赋1
- 数组多,每组比较小,每次memset会超时
- 数组取模等最后单独查
- 最后删调试信息
- 能不用double就不用,能用分数就用分数,会卡精度
- bool 判断是否出现过 但如果爆空间 bitset慢,但省空间
- set的begin()和end()不能用来检查是否为空,要用empty()来检查
- 建子文件夹
- 计算空间复杂度