NOIP前的模板复习和注意事项


联赛除去今天刚好只有一个星期了,最后一个星期也很关键,要吃好睡好保持心情愉悦.当然也免不了最后的复习计划.
首先是模板,之前还有很多模板没有复习到,这些东西是一定要落实到位的.
每天往后面写一点...一定要写完...都是很基础的板子了...

(global-set-key [f9] 'compile-file)
(global-set-key (kbd "C-a") 'mark-whole-buffer)
(global-set-key (kbd "C-z") 'undo)
(global-set-key (kbd "RET") 'newline-and-indent)

(defun compile-file()(interactive)
(compile(format "g++ -o %s %s -lm -Wall"
(file-name-sans-extension(buffer-name))(buffer-name))))

(setq kill-ring-max 200)
(setq default-cursor-type 'bar)
(setq default-tab-width 4)
(setq c-default-style "awk")

(set-background-color "gray15")
(set-foreground-color "gray")

;;好长啊...
;;没有透明好丑啊...

还有真题,对每一年的真题都回顾一下,把握一下每道题的难度.
这个工作一定是要做的.

还有注意事项:

数组开大了或者开小了,空间一定要算好,最好留30mb防止意外,卡着空间是一件很危险的事情.还有注意诸如离散化,链式前向星或者一些要开两倍的数组的一定要注意.

要开longlong的一定开longlong,注意可能题目给你的数字不会炸int,但是结果很有可能爆longlong,空间时间允许尽量都开longlong

n和m写反之类的事情不能再发生了.还有定义k的为某个输入的变量的时候就不能用k作为循环变量了.

很多个if一定要搞清楚逻辑关系,最好几个if并列都用else

多组数据的时候memset一个很大很大的数组,可能会TLE.

在bfs的时候防止越到负界,应该先判负界再调用数组.

看题要注意题目是1下标开始还是0下标,是0下标输入的时候一定要加一,输出的时候也一定要修改.

noip考试是不开o2的,所以慎用stl.

最后确保程序没什么大问题测大数据的时候,不开O2测一次,开O2测一次,以防不开O2数组越界不会报错,最好不要单纯通过大数据来判断有没有越界.

检查输入输出文件有没有出错,删掉注释的斜线之后要编译确保无误,交卷之前5分钟不答题.文件名有没有一一对应,字母有没有输错,文件夹和cpp名字有没有写错,是否子文件夹内外都有一份程序.

读入量过大的时候自己写一份读入优化,确保要读longlong的时候读入优化里写得longlong,有负数的时候读入优化里判了负数,读入优化里的x,sign一定要赋初值.

检查所有在函数里定义的变量有没有赋初值,多组数据是否还有变量没有清空.

注意观察题面里是不是有负边权,是不是有重边或者自环,有的话一定要严谨地分析一下对自己的程序有没有影响.

写完一道题之后自己造数据hack自己(特别是贪心),发现错误不要慌乱,想办法补救,确保写了的分都拿到.

程序出现段错误的时候,用cerr或者cout<<endl输出中间变量判断在什么地方RE的.

最好写一个函数就检查一下有没有写错,写完一个检查一个花费的时间远比写完全部再来调试要轻松得多.

一道题最好写完,或者完成一档部分分再写下一题,不要觉得这题我可能是对的,可能可以写出来.不要以为你之后会有时间写完你之前没写完的代码,考试的时候越开始的时候越清醒,开始写不出来的东西到之后很可能也写不出来,做好这题只有这么多分的心理准备.

打代码的时候注意力一定高度集中在构思程序上,看题和推倒的时候一定高度集中在构思算法上,不要被其他因素所干扰,不要想考完之后会发生的事情,不要总是自己和自己对话.

调试完代码之后一定要删掉或者注释掉自己的调试语句,为了调试方便修改的循环范围,输出范围,断点,一律也要改过来.

连个小于1e9的数字相乘一定要在之前乘以1ll,有的时候有可能忘记.要取模的地方一定要仔细检查有没有取模,加法之后取模常数太大可以写手写取模.

dp转移的时候注意边界条件,第0行0列的数据往往容易忽视,i从什么开始到什么,j从什么开始到什么,k从什么开始到什么结束,这些都是马虎不得的.还有转移顺序,有的时候错误的顺序也可以过样例.

noiLinux的默认密码是123456,防止像去年一样开考打不开电脑.

配置打错的时候一定不能慌乱,不能上战场就乱了阵脚,把调背景颜色的那句话移动位置,找出配置出错的一行.哪一行错了,之后的配置就会跟着不出来,可以通过这种方法查错,5min一定要搞定(考前配置要默十遍).

最好少喝水,上厕所容易分神,特别是排队的时候会关注前一个人有没有回来.有感觉了马上举手,不要等到憋的时候再举手,通常没有十分钟是轮不到的.

早上吃东西不要吃太冷的,也不要吃太多,防止拉肚子什么的.

注意一些库里的关键字,一定避免使用,即使没有调用也不使用.,以防意外.

如果通过达标找规律发现了规律,一定要想想是不是小数据也是对的.

涉及到double比较大小判断是否为0的时候设eps,涉及到斜率的时候要特判斜率不存在的情况,如果斜率非常大或者非常小,很容易掉精度.所以还是尽量避免使用实数.

注意不要在终端或者eshell里粘贴(输出)很大的数据,用gedit打开大数据的时候一定确保每行的数据量不大,emacs开的时候一定注意翻页不要太快了,否则电脑死机就完蛋了.

fa(并查集/倍增),vis(最短路/判段是否到过),f(dp和f),a,b,x,u,q(队列和询问数)这些变量名不要用着用着就混了.

多个dfs的时候注意每个dfs是不是调用到别的dfs去了.

maxn和maxm不要搞混了.

树链剖分不要写成随机剖分,倍增的循环倒序的要倒序,从0开始的要从0开始,从1开始的要从1开始,tarjan求强连通分量(割点/桥/边双联通分量)的时候分清楚low,dfn,vis.点分治要注意不要写成随机分治了.

set要注意是开set还是multiset,这两个常数巨大,要慎用.

lower_bound和upper_bound一个是返回第一个大于等于它的位置,一个是返回第一个大于它的位置.multiset的erase某个点的时候,要erase那个迭代器所在的点,不能erase这个值,多组数据要clear,map和vector也一样.map还要注意if(Map.find()!=Map.end())来判断元素在不在map里,否则只要用数组的形式就默认插入insert.结构体unique的时候要重载==号.

整数除法得到浮点数要加(double)或者1.0*.stl的size()函数都是返回的unsigned long long,和int加减法取max要注意转成整型.

先花5min打配置,5min打include,freopen,建文件夹.20分钟浏览全部的题.30min写完所有的暴力,留着对拍/保底.

如果电脑坏了或者电脑死机了蓝屏了黑屏了,赶紧举手换电脑,像什么都没有发生一样,到新电脑以后,快速写好配置,快速把之前的打好的代码还原,打过一遍的东西很快就可以还原.主要是心态不能乱,要让意外的伤害降到最小.

写到一半发现思路错了,赶紧停下来仔细思考十分钟,确定自己的做法完全错误之后,再想10分钟,如果没有新的思路,赶紧弃掉打别的部分分.

网络流的cnt记得初始值为1,当前弧优化要加取地址符.

思路遇到瓶颈就想象noip往年的那些考法,都是把简单的东西考出花样.想一些常见的套路,例如
图论:可不可以最短路,可不可以最小生成树,可不可以kruscal重构树,网络流,和二分图有没有关联,求割点求联通分量是否可做,是否可以直接并查集,或者去年逛公园一样记搜,dag也许topo排序可以解决.
树上就要想:树上差分,倍增,lca.没办法了就想:树剖,点分,主席树.如果还是没有思路就想是不是可以转化成什么别的模型.
dp:LIS,最长公共字串可不可以直接套.是否可以前缀和前缀minmax.状态和范围很大,答案范围很小可以把状态答案反过来.是不是背包问题.
让最大值最小,最小值最大的题首先考虑二分答案.只要答案是随其他参数变化是单调的,就可以二分答案.
...
想到了再写吧...

原文地址:https://www.cnblogs.com/terribleterrible/p/9925971.html