今天依然在切题的我
8:02 2017/6/14 Snowflake Snow Snowflakes
连数零都不会= =999983明明比100010大了将近9倍
17:15 2017/6/15 球形空间产生器sphere
本机RE的一些常见情况:大小不分,左右不分,正负不分,到底是i++还是i--;scanf万年不记得取地址。
15:12 2017/6/16 臭气弹
分不清ijk,分不清里外层循环,循环中变量用重。【后来看看这好像变成了NOIPDay1T2呢
高斯消元,找到主元之后如果它系数是0,这一位就不用消了;如果某一位的这个系数是0,这一行也不用再处理了。
14:40 2017/6/21 Bovine Genomics
调完程序之后忘了删没有输出的调试行。
21:42 2017/7/13 HH去散步
不记得局部变量要赋初值。
18:58 2017/7/26 烤鸡翅
队列和栈不记得判空,!判空=运行错误。
分析中间过程量,差不多的宁可谨慎一点用long long。
没有加法不会炸int的,随手就0x7f,0x3f可能不够大。
20:00 2017/7/30 王者之剑
dinic在dfs里搜到汇点return f,搜不到答案把dep[x]设为-1。
19:57 2017/7/31 最小截断
忘记邻接表memset(h,-1,sizeof(h))
19:34 2017/8/5 膜拜神犇
数据小就瞎写,不顾变量是什么含义一通乱用,%3写成%n。
13:09 2017/9/24
有向无环图中,最小链覆盖=总数-二分图最大匹配
13:54 2017/10/27 辣鸡
int×int=int——boom!int×int=long long
int+int=int——boom!int+int=long long
19:33 2017/12/25
map里放结构体需要重载大小关系运算符
16:46 2018/1/1 树的维护
关于LCT和树剖:
1.用左移找线段树节点的左右儿子时记得看是否对叶子节点也找了儿子,这样在极限数据下可能会炸掉数组;
2.LCT极值初始化从0节点开始;
3.虽然每次splay操作都会下传标记,但仍有可能不同层次的标记在进一步下传过程中同时存在;要处理好标记之间的关系。
20:12 2018/1/2 地板
关于插头DP:
1.如果m>n swap(n,m),同时交换矩阵和结束点横纵坐标。对程序效率影响很大;
2.p=1、q=2更新答案时检查是否有多余插头;
3.部分遍历问题,在p=0、q=0时可以不经过当前格;
4.路径问题独立插头。
10:37 2018/1/3 免费旅行2
关于点分治:
1.用树状数组维护前缀信息,为防止出0把下标++,不要忘记结束位置也要后移;
2.如果0是必然存在的状态,复原信息时不要变动0
3.向下层分治时特判根所在联通块大小【尽管我并没有因此被卡
21:31 2018/1/4 就是要AK
多组数据输出答案记得要换行,尤其是在样例只给了一组的情况下。
16:20 2018/1/7 冷冻波
有两种玄学的打法:
1 bool op=1; 2 for(int i=1;i<=k;i++) 3 if(check(i)) op=0; 4 if(op) work();
1 for(int i=1;i<=k;i++) 2 { 3 if(check(i)) break; 4 if(i==k) work(); 5 }
后一种是我比较喜欢写的,然后今天因为这个调了一下午QAQ……上述两种写法存在不同,当且仅当k<1。网络流的题邻接表开小了会发生什么谁都不好说(因为是双向边估算边的数目要*2),越界了之后居然跑出了一个比总边权还大的最大流……这一下午过得恶心极了,先发现了自己编程的不严谨,又发现了自己估算范围的智障,最后排查完了所有WA点终于敢说自己的二分是值得信赖的……没有测试点!一直手动assert心好累啊。
一点人生经验:BZOJ上WA了是因为它测到一个点WA了就不往下测了,而HZOJ上T可能是有WA有T就会显示T。只要没AC两边的结果不一样非常正常,好好调题不要太在意这个,讲道理HZOJ还是比BZOJ更适合调试一点的。
12:01 2018/1/8 奇怪的游戏
1.网络流反向边容量为0;
2.1ll<<50可以用于long long的较大值。
3.最大权闭合子图是残余网络里源点所属的联通块,但不代表和源点直接联通。可以由源点到正值点再从负值点由反向边迂回过去……最后一次dfs源点和汇点一定已经断开,所以可以直接根据dep值的有无判断。
15:14 2018/1/12 圈地游戏
最大流的一些常见思想:
1.假设起始状态为得到所有,利用最小割去掉代价
2.二分,根据二分的一些量来调整边权(《费用流》、《冷冻波》)。根据最大流判断可行性不仅仅可以用于二分(《奇怪的游戏》)。
3.可以合并的点、边尽量合并来保证复杂度(《寿司餐厅》、《圈地游戏》)
4.两点之间的边权为它们分开时的收益(《圈地游戏》)或变形(《happiness》)
5.通过分析忽略时间上的一些先后限制条件(《冷冻波》《蜥蜴》)
19:44 2018/1/13 数字配对
不得不说网络流的数组真是太容易开小啦……经常注意不到反向边、附加点需要双倍的空间。Windows环境下看不出数组越界然后WA掉,调了很长时间最后发现是数组开小了总会觉得自己浪费生命。
07:55 2018/1/14 80人环游世界
1.有上下界网络流是建除去下界的残余网络,只要统计好下界的流量就可以了。如果上界等于下界,这条边在图中就不存在。
2.应该认真算一下边的数量。考试不可能也像平常这样不负责任地瞎开,RE了就改,日常的练习也要按照考试的标准进行。昨天晚饭后听到姚教练在跟学弟们强调不应该过分依靠评测结果去判断程序的正确性,感觉这点自己最近也做得不是太好,总是漫无目的地乱改乱调。提高正确率,提高严谨性。
3.有上下界的费用流=下界费用+附加流费用
21:31 2018/1/20 Nim
总也不写线段树居然忘记update之后pushup了……好像自己NOIP模拟赛的时候还因为这事挂过100分,没有长进啊。
18:44 2018/1/26 DZY loves math 4
论哈希表是如何的危险:
1.总不记得更新完要返回值;
2.新加边总不记得head数组下标要%mod。
21:41 2018/3/4 病毒编码
关于NTT的一些事:
1.tt=n1/k
2.预处理w要到n1,因为n1-i*tt可能为n1.
以及:pow不能作函数名!pow不能作函数名!pow不能作函数名!
17:40 2018/3/5 Ordinary Valoran Continent
1.cmath库系列之二:yn是一个系统函数不能作变量名!
要不下次本机编译调上cmath库吧……这两天中奖率为何如此高……
2.三目运算符的优先级不如乘法高,写的时候还是带括号比较稳妥
19:17 2018/4/9 劈配
判断大小关系的时候记得看题目中有没有对0等特殊值含义的不同定义
12:19 2018/4/12 Rikka with Sequence
滚动数组的下标nt=i&1,la=nt^1,绝大多数情况第一遍会写成la=i^1……
16:09 2018/6/22
neyc集训时的一些问题:
1.对于值域的初始化要格外小心。
2.注意核对模数。
3.类似区间DP的转移要格外注意转移顺序,确保小区间维护完成再去更新大区间。
16:23 2018/7/9
霍尔定理:二分图G存在完美匹配当且仅当x中的任意k个点至少与Y中的K个点相邻。
原来以为这东西没什么用……今天才知道可以用来求极值解最优化问题……“当且仅当”就是最好的理论依据。
21:32 2019/1/10
快速排序的comp函数必须有确定的大小关系,即使在题中等价也要强行定序,否则前后矛盾会导致RE。
错误示范
1 int comp(node x, node y) { 2 if(x.top > y.top) return 0; 3 if(x.top < y.top) return 1; 4 return 1; 5 }
正确示范
1 int comp(node x, node y) { 2 if(x.top > y.top) return 0; 3 if(x.top < y.top) return 1; 4 return x.id < y. id; 5 }
9:05 2020/3/28
在赛场上只能肉眼查错时,想的总是“写错了什么”,而很少想到“少写了什么(初始化)”。
23:44 2020/4/18
printf输出字符串默认结尾有一个0,所以如果要改动字符串的长度,应该在结尾补0。标识0不会被输出,但缺失会导致输出错误。
错误示范
1 for(int i = 0; i < m; ++i) 2 if(i + m >= n) 3 s1[i + m] = ma[s1[i]]; 4 printf("%s\n", s1);
正确示范
1 for(int i = 0; i < m; ++i) 2 if(i + m >= n) 3 s1[i + m] = ma[s1[i]]; 4 s1[2 * m] = 0; 5 printf("%s\n", s1);
18:16 2020/10/21
位运算一定快吗?
1 if(dfs(i) & dfs(j))
这个东西是用&运算的结果来判断,所以一定要两边都dfs到。不知为什么编译器似乎并没有优化这个判断。
1 if(dfs(i) && dfs(j))
这个东西只要dfs(i)为0,就不会再去运行dfs(j),因此可能对效率有很大影响。
南风知我意,吹梦到西洲。