关于找规律和智商题以及各种做题时出现的坑。。。

这两天被规律题虐得不行
因为我都是那种,通过题意看性质的做法。。
然鹅性质可能过于复杂,看不出来
所以就要打表。。。

手打+程序打结合,手打验证正确性,程序打表是为了打的更大一点,因为很多时候手打表打的小了观察不出规律

就是,真的去把表格列出来,找上下行,不同列的关系
还有就是找规律真有可能找错,

先打好暴力,然后对拍什么的

还有 写代码的时候一定要动脑子!动脑子!动脑子! 特别是那种
x x x x x x x
x x x x x x x
x x x x x x x
x x x x x x x
这样的
比如说有x次操作,每次操作是 a i = a i + a i m o d n + 1 求第x次操作后位置y的数是多少
打出表来。。。
1 2 3 4 5
3 5 7 9 6
8 12 16 15 9
20 28 31 24 17
然后发现每个数都是他上面两个数的和
然后看看位置y的数是怎么加起来的,会发现这个东西和组合数用关系


关于智商题…

这两天被智商题虐的不行。。。
其实我的思维方式有问题…我总是不去模拟那个过程,而是非常“混沌”地想这是什么,但是混沌的想法怎么能出来清晰的解法呢…就得按部就班地进行那个过程,看看这个过程会发生什么,特别注意若有n个东西移动,那么把范围小一点,只考虑一两个,然后推出来某结论时也要注意不能丢了题意给的过程,所以说逻辑是战胜混沌的重要方法啊…
比如说洛谷上的独木桥那题
如果我画画图,模拟人怎么走,走完后又是什么状态,结合每个人速度一样就能找到解法
但是我最不好的地方就是找到了一个性质后,非要热衷于找反例
找反例是好的,但是很多时候乱构造出的反例可能不存在,但是有时候又容易忽视掉不存在那种情况的可能
导致题做不出来
而且我总是“混沌”地想,数据这么乱,怎么可能都满足这个性质呢
但是这是题啊。。。题一定有他的做法的,你总要依据题意,从中挖掘出什么重要性质,而且oi不需要证明
关键是找反例这里,千万不要构造反例了,以自己的角度很难知道这个反例哪里不合理,只要证明那个性质具有普遍性就可以了
所以说性质别乱找反例,但贪心可以找反例,因为容易贪错


“!” 运算符的优先级很低,所以注意判断奇偶数时要在括号里%

!(a%2) 或者直接if(a%2)判断是奇数吧
同时也要注意,即使考场上没有部分分的数据,写完部分分后自己也要测一下,防止出现低级错误

注意 双向边定义数组大小时必须写乘2
这个有时候忘了就很难受,就写e[MAXN*2],反正一定要记着数组开两倍(因为大多数时候N,M同级,所以就写MAXN了)

多组数据数组记得清0

模的时候要注意 举个例子 比如说我要绕环走,那么我的位置就是(y+k)% n y起始位置(把y+n当做一个整体,从1号点走到y再走到n),k走的距离,n个数
那么有个问题 如果说y+k == n的倍数 那么%后变为0,但是我们应该走到n的
可以设a[0] = a[n]
也可以只考虑k,把k单独%n 再加上y 特判当y+k%n > n 时减去n
也就是说%n次之后正好回到了y,再考虑剩下怎么走
然而还是容易错,出几组极特殊的例子测测就行
或者更简单的办法是从0开始计数 当y+k = n时模一下正好回到开头 而n-1是结尾0是开头

字符串从0到n-1
状压dp从0到 (1<<n)-1

如果说一个题,调了半天,然后勉强过了样例,把一个算法修修补补,那很有可能写错了,最好重新做下这道题 必须要重看一遍题面,把整个过程把握住,不要想到哪写到哪,写的程序要有条理。。。我17年时间复杂度本来该拿100分,但是拿了70,因为我调过了大样例,但估计只是勉强过得,我并没有想用两个栈,我只是一边读题一边写

文件一定不要写错,有时候眼看不出来,抄下来一个个对,或者分时间段多看几次

数组开大点,如果说只用01两个变量开到3 lca倍增20次就行开到25

猜你喜欢

转载自blog.csdn.net/Fantasy_World/article/details/81432532