NOIp专题个人分析及考前总结
NOIp2018考前的一些总结和骚话,不用管它...
NOIp一些专题
模拟/搜索
把重要的信息在题目中标注或在草稿纸上写下来.
还没想清楚的时候就一定不要开始写代码,最后如果花的时间过长又没调出来要及时调整好心态.该放弃的时候就写好暴力放弃吧
Dp
状压 字符串 期望概率 背包 记搜 topsort 区间Dp??? 数位Dp??? 斜率优化??? 数据结构优化???
Dp一直以来是我比较弱的部分,但似乎近几年的题并没有出很难的Dp题.(flag)考试的时候如果一些题目完全没有头绪就可以往Dp方面想.
大胆设状态,一开始可以多设几维状态,然后不断优化.
对于一些比较难的Dp,状态转移方程要在草稿纸上写好,一定要考虑清楚Dp的边界!!!
状压Dp拿部分分很重要
树上问题
二分答案 倍增 LCA 差分 线段树合并
近几年的树上问题基本都放在了T3的位置,不过幸好都做的差不多了,发现考来考去也就那么几种考法.去年没考树上问题,奶一口今年会考
遇到树上问题如果实在想不出来,可以多猜猜找找性质,考虑贪心/二分答案.
如果想到大概的做法,但是没想清楚怎么维护的话,可以考虑差分/线段树合并等技巧
数学
找规律 解一元二次方程 组合数 扩欧 质数 线性筛??? 高斯消元??? 矩阵快速幂???
数学实在是弱啊,希望千万不要考去年Day1T1那种结论题了.
以前考过的数学方面的题并不是太难,实在不会就找规律猜结论吧...
数据结构
并查集 堆 树状数组 线段树 (平衡树) 分块???
NOIp范围内的数据结构也就那些比较基础的东西,而且一般来说数据结构题的部分分都比较多,比较好拿.如果不能够A掉的话就一定要把部分分拿满
码代码的时候一定要静下心来,不要求快,稳一点,否则查错会很痛苦,而且很容易造成心态爆炸
注意:线段树中查询千万不要Chkmin,Chkmax!!!!
图论
最短路 生成树 倍增 tarjan 缩点 dfs bfs
图论好像没怎么考过,考过的都比较基础.
考前把最短路,最小生成树,tarjan都复习好,奶一口今年会考tarjan
其他
贪心 二分 高精度 差分/前缀和 乱搞??? 三分??? bitset??? meet in middle???
这些就是一些常用骗分优化技巧吧
字符串???
Hash Kmp AC自动机
字符串从来没考过,今年会考吗?
猜测要考的话也应该能用Hash做(毕竟第一次考)
网络流???
二分图匹配 最大流 费用流
这个东西也没考过,不过二分图匹配考的可能性比较大.
把Dinic板子准备好,费用流不大可能考吧....
考试注意事项
考前
目标: 保400, 争取450+,反正做梦都上不了500的.
虽然说目标定的这么多,但真正考试的时候还是先把暴力写满,万一题目太难淦不出来又没写暴力就真完蛋
考前再看一遍Debug注意事项,一定不能犯低级错误.
考试
进考场马上做的几件事情:
xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
调整控制台首选项:半透明、字体及大小(
Ubuntu Mono 16
)(暂定)配vimrc:
1 | autocmd BufNewFile *.cpp 0r ~/template.cpp |
写template缺省源:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
template <typename T> inline int Chkmax (T &a, T b) { return a < b ? a = b, 1 : 0; }
template <typename T> inline int Chkmin (T &a, T b) { return a > b ? a = b, 1 : 0; }
inline void proc_status()
{
ifstream t ("/proc/self/status");
cerr << string (istreambuf_iterator <char> (t), istreambuf_iterator <char> ()) <<endl;
}
inline int read ()
{
int sum = 0, fl = 1; char ch = getchar();
for (; !isdigit(ch); ch = getchar()) if (ch == '-') fl = -1;
for (; isdigit(ch); ch = getchar()) sum = (sum << 3) + (sum << 1) + ch - '0';
return sum * fl;
}
inline void Solve ()
{
}
inline void Input ()
{
}
int main()
{
freopen(".in", "r", stdin);
freopen(".out", "w", stdout);
Input();
Solve();
return 0;
}写好每道题的gen,check,静下心等待发题
拿到题目不要慌,一般来说NOIp题面都很长,静下心来读题,在题面里标注重点.
花30min把三道题都看完,大概口胡一下简单题/难题部分分的做法,按难度顺序开题.
想题/码代码的时候尽量不要收到其他人的影响,专注于自己的做题,不要去管其他人. 码代码的时候冷静一点,求稳而非求快.不要图快而定义非常多暂时性的,无实际意义的变量名(如tmp tmpp tmppp),这样会导致调试浪费大量时间
不管有没有发大样例,暴力能不能写,都要自己造gen,测极限数据.(自己多造一点强数据,想办法卡自己的程序)
用 -fsanitize=undefined/address
看看有没有爆 int
以及数组,看 /proc/self/status
有没有炸空间.
一定不能在一道题上花太多时间,哪怕是会做但是没调出来也要及时放弃,少点分总比爆零好!!!
考后
Day1不管考的怎么样,都不要影响到Day2的心态,毕竟有yyc去年的神奇翻盘经历摆在那里(可是我并没有那么强)
11.21 Update
发现西除了树上问题+二分答案奶中了之外,其他都没奶中啊,不过幸好考前搞了下树上问题,不然就凉了
而且居然一道傻逼Dp题没做出来
似乎这次考试花在检查+造数据+拍的时间上太多了,结果还有很多有可能拿到的分没有拿到.但是正因为如此,所有题目加起来才挂5分(数据实在是太水了...)
其他的问题放游记里写吧