大神

犯错合集及需要注意的东西

1、在一个地图求最大面积的类问题中,要注意障碍结点的影响。

2、ll(),表示的是在运算后把括号内强制转化为类型ll,而(ll)表示后面的每个玩意都强制转化为类型ll。在做历史研究这道题时我WA就是因为我用的是ll()而不是(ll)。

3、splay每次splay操作后一定要记得更新root!

4、可以使用树状数组就尽量不要使用线段树。在Gty的文艺妹子序列这道题本机测试极限数据,线段树15s而树状数组4s,差距真大。

5、不需要开long long的就不要开long long。

6、分块算法,一定要特判两个端点之间没有跨过任意整一块的情况。

7、使用问号语句记得括号,不然会出错例如:

(ll)dp[i-1]*i%mo+(i%2)?-1:1

得到的值只有-1或1。

正确打法:

(ll)dp[i-1]*i%mo+((i%2)?-1:1)
  • 1

8、不要主观臆断认为一个算法会TLE

9、点分治第0层不需要减去非法答案。(注意是第0层)

10、能打普通网络流不要随便上匈牙利

11、尽量提高算法的鲁棒性

12、有模运算的题目通常为了减少运行时间保留负数,这时将一个数t取反直接t=-t不要t=mo-t

13、使用肉眼检查程序时注意以下几点:

检查空间是否爆炸(很关键的第一步)

对应着题目的数据范围,一个个思考每个数组的意义以及大小是否开够 
同样要思考每个变量的范围,看看类型是否开够了,有时候会爆long long时考虑double 
然后重新过一遍代码, 认真的再思考,去检查每一个模块,尤其是要对乘法之类的敏感,思考会不会爆类型 
对于要初始化的部分,看看是否记得初始化需要使用的东西,初始化的范围是不是对的,如果用到了极值inf之类的仔细算inf是否就是极值,同时堤防inf是否过大以至于参与各种运算时爆类型 
最后检查一下定义的常数(如maxn),对照题目检查模数(不要被10^8+7坑),检查文件名和输入输出(输入是否能合法读进来,输出会不会格式错误)

14、不要用%lld输出int类型!

15、单调队列优化时,任何时候特别是转移时要注意队列内是否有元素。

16、不要写反n和m。出数据对拍时多注意出n不等于m的情况,n>m和n<mn<m都最好出一下。肉眼检查时同样需要特别注意这个问题。

17、处理树的问题时,一定要记住父亲编号比儿子编号大的情况可不可能使自己程序出错。

18、正解程序与暴力程序的共用部分,要好好检查,不然出了错都不知道自己怎么死的。

19、对于很难出数据或出的数据通常较水的情况,更加应该思考使用肉眼检查+小数据来检查程序。

20、即使是暴力,也要出极限数据去看会不会超时

21、splay使用旋法提取[l,r]需要特判l=r的情况。

做题套路以及一些东西

0、以下可能逻辑不通QAQ,都是归纳的一些idea啦。

1、字符串中的最长延伸问题可以用二分+哈希解决。

2、树的同构——有根树采用最小表示法,子树按照大小排列。无根树找到重心转化为有根树。

3、网络流用连边表示一种约束,然后如果约束最后形成二分图,即可用最小覆盖或最大独立解决。

4、期望的线性性:和的期望=期望的和

5、字符串的性质:求一个长度最小的T使得在S后补一些字符所得到的字符串存在循环节为T。那么答案为|S|-|next(S)|,next是KMP指针。

6、要求一个f[i],f[i]只与前i-1相关,则可以考虑CDQ算法

7、求LCS的另一种dp,f[i,j]表示a的前i项选一个和b的第j项作为最后一次匹配的最大长度。f[i,j]=max(f[i-1,k]),视情况+1。

8、如果建了广义后缀树,可以用线段树合并的方法得到每个状态在多少个字符串中出现过,复杂度等同于字符串总长度log。

9、本质不同、本质步数之类的都好玄妙。例如一个数,不断整除,本质只会除log次就变成0了。

10、启发式合并是个好东西。例如这道题:求多少个(i,j)满足ai*aj<=max(ai~j)。首先建立笛卡尔树,枚举一个节点,变成统计左子树和右子树各挑一个,符合的个数。我们很容易想到暴力去做,即枚举两个子树中的一个。还可以想到一点优化,即枚举一个子树中的一个,另一个子树使用数据结构维护。然后发现,每次枚举较轻子树,复杂度与启发式合并一致!

11、如果能够证明相邻的偏序性,便可以通过传递性认为具有全局偏序性(纯口胡)

各种有用的东西、黑科技、技巧

1、整体二分及cdq分治实现时,每个区间不需要单独开队列。可以把操作弄到一个数组了,然后多两个参u、v表示这个区间的操作在u~v,做完后对每个操作打标记表示是否往右区间传即可。

3、unique()可以删除重复元素,然后返回删除重复元素后的末端地址。 
下面这段代码即可实现离散化。

fo(i,,n) scanf("%d",&a[i]),b[i]=a[i];
sort(b+,b+n+);
l=unique(b+,b+n+)-b-;
fo(i,,n) a[i]=lower_bound(b+,b+l+,a[i])-b;

4、可以用调用ctime,运用clock()获取程序运行至该语句时的时间(默认ms)

#include<iostream>
#include<ctime>
using namespace std; int main()
{
int n=;
//start=clock();
while(n<)
n++;
cout<<(double)clock()<<endl;
return ;
}

5.调用头文件bits/stdc++.h就相当于包括了好多库……

6、如何打伪随机数?

int rand() {
static int rand_seed=;
rand_seed+=rand_seed<<|;
return rand_seed;
}

8、关于可持久化,记住以下几点: 
1:一个点的信息要被修改时需要对其新建。 
为了节省空间,一个点的信息不被修改时就没必要新建了。 
例如合并一个结点与空节点,此时不需要新建。 
2:为了节省空间,如果对空节点进行newnode我们直接返回空节点(不适用任何可持久化数据结构,这条大概适用堆)。 
3:打标记也涉及修改信息,不要忘记newnode。而down的时候其实并不用,因为修改的是儿子的信息。 
9、从OJ上看来一句话,不知道来源。 
OI比赛的题目无非三种,从暴力到优化,从一般到特殊,重新定义题目。 
10、 FFT/NTT做题方法与调试技巧(+提高码题效率的一些想法) 
来自链接 
11、O(n)求出1~n对于质数MOD的逆元。 
来自链接 
inv[i] = ( MOD - MOD / i ) * inv[MOD%i] % MOD 
证明: 
设t = MOD / i , k = MOD % i 
则有 t * i + k == 0 % MOD 
有 -t * i == k % MOD 
两边同时除以ik得到 
-t * inv[k] == inv[i] % MOD 
即 
inv[i] == -MOD / i * inv[MOD%i] 
即 
inv[i] == ( MOD - MOD / i) * inv[MOD%i] 
证毕 
12、同时维护加法标记和赋值标记时,为了程序方便,可以把标记写为a*x+b的形式。同样,维护加法、赋值和取max标记可以把标记写为max(a+x,b)的形式。 
13、实现平衡树时,应该在x那加上&,注意rotate也需要。这样写最简单。

卡常及搜索优化技巧积累

1、求一个数的所有因数,可以暴力根号求,也可以分解质因数再用dfs组合而成。 
分解质因数时,如果枚举的质因数的平方大于当前待分解数,待分解数只能是一个质数,可以直接退出。 
2、一个寻址优化。举个例子,你在做dp

我们通过改变存储顺序来优化常数

fo(j,1,m)
fo(i,1,n)
f[j][i]=……

3、log函数调用是很慢的,因此可以尝试通过预处理节省时间。 
4、调节块大小能有效卡常! 
5、多个串并成一个串然后求SA时,为了提高效率可以插入不同的分隔符。 
6、可行性减枝,思考在极端状态下能不能达到要求,不能就直接退出。 
例如:搜索n个数和为s,要求这n个数不降。 
假如搜到了第i个位置,此时第i-1个位置是j,和为k。 
极端情况下,后面所有位置取可行最小值j,那么若k+j*(n-i+1)>s,则搜下去不可能有可行解,可以退出。 
7、记忆化。搜索时注意,对重复状态记忆化来使得总搜索状态不会过多。 
8、一个寻址优化,下面是跑的慢的写法。
f[i+1][next[j][k]]+=f[i][j])%=mo;
考虑寻址优化,下面是跑的快的写法。
t=next[j][k]; (f[i+1][t]+=f[i][j])%=mo;
下列写法通常可以进行优化
(f[i+1][t]+=f[i][j])%=mo;
把+=和%=替换掉
f[i+1][t]=(f[i+1][t]+f[i][j])%mo;
10、别人写的东西。 
转载自Sky_sys 
常数优化和常见问题 
11、启发式合并可能比线段树合并快 
12、分治FFT在区间较小时,可以选择暴力卷积替代FFT。 
13、NTT比FFT更加快速。 
14、你的NTT写法太菜了!我们换一种!注释掉的是原写法。
void DFT(int sig){
int i;
fo(i,,len-) tt[rev[i]]=a[i];
for(register int m=;m<=len;m*=){
/*int half=m/2,bei=len/m;
fo(i,0,half-1){
int wi=sig>0?w[i*bei]:w[len-i*bei];
for(int j=i;j<len;j+=m){
int u=tt[j],v=(ll)tt[j+half]*wi%mo;
tt[j]=(u+v)%mo;
tt[j+half]=(u-v)%mo;
}
}*/
register int half=m/;
register int wi=sig>?w[len/m]:w[len-len/m];
for(i=;i<len;i+=m){
int o=;
for(register int j=i;j<i+half;j++,o=(ll)o*wi%mo){
int v=(ll)o*tt[j+half]%mo;
tt[j+half]=(tt[j]-v+mo)%mo;
//tt[j]=(tt[j]+v)%mo;
tt[j]=tt[j]+v>=mo?tt[j]+v-mo:tt[j]+v;
}
}
}
if (sig==-)
fo(i,,len-) tt[i]=(ll)tt[i]*ni%mo;
fo(i,,len-) a[i]=tt[i];
}

现在的写法让我们的空间访问变的连续,更快了! 
15、数学函数一般都很慢,如果可以请尽量预处理。 
16、除法比乘法慢很多,如果可以预处理不妨预处理倒数,这样每次就可以用乘法了

ACM 大神的经验加技巧(当然不是我的拉——的更多相关文章

  1. 每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

    本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头 ...

  2. 实战经验|大神战队都在i春秋教你打CTF

    全国大学生信息安全竞赛创新实践能力赛旨在培养.选拔.推荐优秀信息安全专业人才创造条件,促进高等学校信息安全专业课程体系.教学内容和方法的改革,培养学生的创新意识与团队合作精神,普及信息安全知识,增强学 ...

  3. 一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师,请教大神

    一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师 LZ本人想往架构师发展, 业余时间也会看一些书籍, 但是感觉没有头绪, 有些书看了,也没有地方实践 我做了4年的java开发, 在一个公 ...

  4. 交流希望希望能得到一些大神的指点,加QQ群:249627436 java技术交流群

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 本人学习java,1年多,对一些基本技巧已掌握.为了使自己能力晋升建了一个QQ群:java交 ...

  5. darknet优化经验-AlexeyAB大神经验

    目录 darknet优化经验 1. AlexeyAB改进项 2. Linux下编译选项 3. 训练经验 4. 提升检测效果 5. 总结 6. AlexeyAB大神改进 darknet优化经验 主要来自 ...

  6. HTMLTestRunner 汉化版---来源一个大神的源码(加了失败截图,用例失败重新执行 功能)

    HTMLTestRunner 汉化版 20170925 测试报告完全汉化,包括错误日志的中文处理 针对selenium UI测试增加失败自动截图功能 增加失败自动重试功能 增加饼图统计 同时兼容pyt ...

  7. 对话机器学习大神Yoshua Bengio(上)

    Yoshua Bengio教授(个人主页)是机器学习大神之一,尤其是在深度学习这个领域.他连同Geoff Hinton老先生以及 Yann LeCun(燕乐存)教授,缔造了2006年开始的深度学习复兴 ...

  8. 对话机器学习大神Yoshua Bengio(下)

    对话机器学习大神Yoshua Bengio(下) Yoshua Bengio教授(个人主页)是机器学习大神之一,尤其是在深度学习这个领域.他连同Geoff Hinton老先生以及 Yann LeCun ...

  9. Android大神 博客

    https://github.com/yeungeek/awesome-android-person Android大神 受Trinea的开源项目的启发和参考,也准备列一列Android圈里的大神们. ...

随机推荐

  1. Qt Quick中的信号与槽

    在QML中,在Qt Quick中,要想妥善地处理各种事件,肯定离不开信号与槽,本博的主要内容就是整理Qt 中的信号与槽的内容. 1. 链接QML类型的已知信号 QML中已有类型定义的信号分为两类:一类 ...

  2. bzoj 3545: [ONTAK2010]Peaks Kruskal重构树

    题目: 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经 ...

  3. bzoj 2594: 水管局长数据加强版 Link-Cut-Tree

    题目: Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公 ...

  4. python日志轮转RotatingFileHandler在django中的一个bug

    简介 大量过时的日志会占用硬盘空间,甚至长时间运行不注意会占满硬盘导致宕机,那么就可以使用内建logging模块根据文件大小(logging.handlers.RotatingFileHandler) ...

  5. SQL Server:sp_send_dbmail参数设置

    sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]    [ , [ @recipients = ] 'recipients [ ; n ]'  ...

  6. windows服务和进程的区别和联系

    Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出. 任何的用户消息通常都是记录在Windows 事件日志里.Windows Serv ...

  7. java代码JFrame练习

    总结: package com.da; import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; impor ...

  8. nginx与apache 限制ip连接数和带宽方法

    今天有个人问我,nginx怎么限制ip连接数,突然想不起来了,年龄大了,脑子不怎么好使了.还要看一下配置才想起了.那个人又问我,你测试过的吗?一下子把我问蒙了,我真没测试过了,也不知道启作用了没有. ...

  9. union联合体学习

    union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量. 不过区别也挺明显: 结构体(st ...

  10. hadoop自己写的最高温度程序源码

    package com.teset; import java.io.IOException; import java.util.StringTokenizer; import org.apache.h ...