• NOIP总结


      拿到题目先写裸的暴力,暴力一定要写对,没想出正解有暴力垫底,想出了正解也可以拿来拍

      过了样例之后一定要造数据测,数据越坑越好

      一定要造极限数据,哪怕造不知道答案的数据都行,主要是检测RE和TLE,正确性用拍来检测

      如果目前已经可以拿到很高的分,可以考虑放弃剩余的小分数,把时间留给其它地方

      题目一定要认真仔细看清楚,坚决避免代码写完了结果题目看错的情况

      样例一定要手动分析一遍,或许分析的过程中就能找到思路,同时分析样例也是帮助理解题意

      简单的题目要照简单的方法做,不要想着一些高大上的东西,只要能过就行

      注意数组的大小,在不爆空间的情况下宁愿开大一点

      遇到题面很难读懂的题目一般都是水题,只是它的外表迷惑了你

      特殊的数据要写骗分,比如m=1或者k=n之类的

      代码里用 if 判断选择不同数据范围,小的数据用暴力,大的数据写正解,这样是最保险的

      想不出来的一定不能空着,哪怕猜个结论,输出个n/2,随机一个数都可以

      连通性想到并查集,这是很优秀的一个数据结构

      DP方程可以做变形,从中发现是否具有单调性,或者可以做斜率优化等等

      对于一个正整数n,可以用二进制来表示,也就是每一位可以用若干个2k相加来表示

      范围给的很小的题目正解通常就是搜索,如果搜索跑不出来可以想想状压DP

      只有一个数字的输入或者范围给的太大(如n=231)往往能够O(1)地做,而且一般这种题目能够打表找规律,或者推出O(1)的公式,或者根据n来骗分也可以;如果公式推出来是O(n)的但是答案是有规律的,那么可以分段打表

      哈希值要定好,两个大的哈希模数是109+9和109+7,乘的p取6-8位的质数,可以用106+7和106+9

      求最值题先想贪心,再想DP,二分答案,如果想不出来正解可以贪心骗分

      DP发现时间复杂度不对但是优化不了的时候,可以随机前面的状态转移,随的次数根据时间去计算

      贪心要去证明它的正确性,可以找反例,或者拿暴力去拍

      正确性不确定的算法一定要拍

      一般题目都不会卡SPFA,有时SPFA比Dijkstra+堆还快

      在判断 x>0 的时候一定要想 x 会不会有负数的情况,如果有负数单单写个 if(x) 是错误的

      字符串千万别用gets读入,scanf("%s") 是以空格或者回车作为字符串的结束标志

      许多二分栈可以优化成单调队列

      记忆化搜索容易写,不用想DP的拓扑关系,缺点是无法剪枝,所以要算好复杂度

      欧几里得距离是实际的距离,曼哈顿距离是横纵坐标差的和,切比雪夫距离是取max(横纵坐标差),也就是国际象棋王走的最短距离

      DP找不到单调性的时候可以把状态打出来,寻找它的单调性

      经典的模型一定要会写,而且要写得熟练

      DP的转移可以用数据结构维护之前的状态

      有些题目的正解就是从暴力一步步推出的,或者是一些特殊数据的算法的结合版

      最长前后缀可以用KMP的预处理线性得出

      带条件限制的最短路可以增加一维状态来做

      对于0,1之类的小数据要做特殊判断

      数据范围是n<231时不能直接 for(;i<=n;i++),因为i=231-1时再i++就会变成负数

      一般有最优性剪枝的搜索都可以卡时

      如果对于每个询问都要做相同的预处理,可以把连续的询问放在一起预处理,这样效率会高些

      题目要求选择一些特殊的点时,将这些点加上或者减去一个数会影响答案,那么这就可以进行二分

      裸的数据结构题先打暴力,一般这类题的正解又臭又长,很难短时间内写对

      类似于八车问题,可以用把行和列拆成点做二分图匹配

      若要求数列中某个数不为其中两个数之和(或同一个数的两倍),那么最多可以放的数为最小的数的值

      代码一边写要一边想,争取一次打对

      贪心证明是错的题目,或许能够贪心+调整做

      如果实数比较要求输出3位,一定要输出4位及以上,总之要比它至少多一位

      long double不能直接输出,要转成double再输出

      整数除以整数,即便是赋值给实数,得到的也是整除的结果

      式子里至少有一个long long,否者会爆int

      如果下一行要读入字符串,那么这一行的scanf("%d",n)要加上 变成scanf("%d ",n)

      每道题都可以加读入和输出优化

      一个环可以复制一遍接到后尾成一条2n的链,这样可以选断点的时候操作更简便

      如果一个点为两点之间的必经点,那么删去这个点会导致这两点不连通

      要求乘积的最值,可以转换成把每个取对数相加的最值

      树上倍增转移值时,g[j][i]=g[j][i-1]+g[f[j][i-1]][i-1],右边g的第一维中为f(祖先),不为g

      如果在拍中还输出了别的东西,提交的时候一定要改回来

      在最终提交前,要把所有代码都测一遍样例

      在个人文件夹下建子目录,外面也要放源程序

      如果有多组数据,可以把样例合在一起再测一遍

      如果long long加了读入优化,读入一定要改成long long,也就是说换了类型的变量在所有读入和输出中都要换

      卡时的地方判断一定要是 if (clock()>TL*CPS) 一个不能错

    版权所有,转载请联系作者,违者必究

    联系方式:http://www.cnblogs.com/hadilo/p/5932395.html

  • 相关阅读:
    结合P2P软件使用Ansible分发大文件
    Centos7 上安装 FastDFS
    go在centos配置以及go mod配置
    代理
    笔记本安装ubuntu18.08,解决过程中出现的各种问题
    CentOS7设置自定义开机启动脚本,添加自定义系统服务
    gitlab忘记密码找回
    zabbix配置短信报警
    将博客搬至CSDN
    RT-Thread-stm32f769-qspi-flash移植
  • 原文地址:https://www.cnblogs.com/hadilo/p/6021174.html
Copyright © 2020-2023  润新知