程设讨论区妙着集锦

来源:互联网 发布:mysql 命令删除表字段 编辑:程序博客网 时间:2024/05/17 02:47
  这篇博文主要是记录程设讨论区里大佬发表的一些不错的想法亦或是些经验教训。
1.网教的WA、RE、TLE等可能不准,有时候明明是内存爆了,结果它显示是TLE,然而显示的时间还尼玛是0.003s,有时候明明应该报RE,它直接报WA了,导致debug时方向与思路不能及时正确的调整,反正网教的编译器就是个上古时期的鬼畜般的存在,所以一旦出错,应该要尽量全盘考虑,一丝一毫的细节都不能放过,话说怎么感觉像是老师故意这样子,有利于提高我们debug的能力?
2.测试用例数据可以用while(1) getchar(); 如果与猜测的数据类型相符,它会报TLE。 看到大佬给出的这个策略,实在是666,不过也很考验个人的联想能力啊!但这也不失为一个很好的debug策略。
3.尽量节省空间,例如在单词接龙那题,我是用五维数组的方法,在开数组时用的是short int型,如果是int型就会爆内存。在很多问题上都可以用short型降内存;有时降空间也会同时降时间,例如long long 比int型运算起来更耗时间。
4.float或double型的“0”有时是一个0.000000···1,并不完全是等价于严格意义上的0,故有时a == 0 不一定绝对成立,可以用0.0··1~0.00··1判断,即a在一个精确度趋于0的范围进行判断。
5.贪心解法有后效性,dp 解法无后效性。

为什么贪心解法有后效性?这是由于,贪心解法的状态编码不足。贪心解法仅用一个数量 i 进行状态编码,表示贪心过程走到第 i 步,贪心方案选择是选择左边的数或选择右边的数。这样,后继(未来)的贪心选择就与当前状态的历史状态有关了(不同的历史选择必然导致后继状态的局面不同从而影响未来状态),即有后效性,无解。

为什么 dp 解法没有后效性?这是因为,dp 解法使用两个状态参量 (i, j) 进行状态编码。对于一个确定的状态 (i, j),其后继状态仅与 (i, j) 有关(因为确定了(i, j)的解,不论在之前我是怎么选择直到(i, j)这一状态的,都能唯一确定后继状态(i + 1, j)和(i, j - 1)的局面以及其解),即无后效性。

这是一个大佬给出的说法,我个人的理解就是贪心属于一维策略,dp[][]属于二维策略,并且高维可以解决低维,也可以出现dp[][][]....高维的dp。

6.getchar()的读入速度比scanf快,有些题tle的话可以改一下输入。

7.字符串输出乱码,例如我曾经出现过“烫···”,加了'\0'就好了。

8.有时候直接使用字符串处理相关的函数会出错,自己重新写就会没事。这个我也不记得我自己是否出现过,印象不深刻,但是看讨论区里似乎有不少同学出现了这个问题。

9.注意变量初始化,尤其是循环更新时有的变量忘记重新初始化。

10.早睡早起身体棒棒,切勿熬夜码题!!!

原创粉丝点击