NOIP前模拟赛总结
from 2018.10.7 to ???
Date | Name | Score(Rank) | Problems |
---|---|---|---|
2018.10.7 | McfXH AK Contest | 42(?) | 期望得分230,T1因为没有仔细看数据范围以及没有测试极限数据爆成12分,T3dp方程推错爆零,T2不会,只有30分暴力 |
2018.10.7 | noi.ac第三场 | 150(?) | 第一题因为map常数大爆成45,第三题又因为写了十颗线段树去完成一颗线段树就能完成的工作,常数爆炸,得到80,第二题dp状态没有想到只有25 |
2018.10.8 | noi.ac第五场 | 230(?) | 第三题没有想到。。。T2dp又一次不会。。。 |
2018.10.9 | noi.ac第六场 | 270(?) | 比较顺利,T2动态规划接近正解,获得70分 |
2018.10.9 | 正睿OI普及组摸底测试02 | 390(1) | 挂了两道题,都是95分。。。T3是因为少判断一种情况,T4图可能不连通,在tarjan的时候写到了这种情况,但是后来dfs的时候忘了改了。。。 |
2018.10.9 | 学校模拟赛 | ?(?) | 非常不正式,只考了1h+,想出来前两题,时间多的话T3可能也能想出来 |
2018.10.10 | noi.ac第四场 | 170 | 感觉好难啊,T3线性基可以维护序号没想到,T2题解都看不懂。。。 |
2018.10.10 | 正睿OI普及组摸底测试03 | 200(10) | 打的极差,大部分因为环境原因(学校就没有一个能做题的地方。。。)还有是因为想法不够全面(可能跟环境差也有关系,没法好好思考) |
2018.10.11 | 学校模拟赛(by lqs) | 230(?) | 前两题做的很快,但是T3卡住了,最后只得到30分,字符串水平急需加强(不过似乎NOIP没考过字符串。。。) |
2018.10.11 | 正睿OI普及组摸底测试04 | 390(1) | 题目简单,做的比较顺利,问题是把Hulk打成了Halk,看来得补一补英语了? |
2018.10.13 | 正睿OI提高组十连测07 | 230(3) | 哇好像十连测马上就结束了,可是感觉状态还是不咋的啊。。。挺简单的比赛(良心出题人JOHNKRAM)T1直接暴力,T2大概就是树形dp,树上的随机游走好像挺经典的,可是在第二个dp的部分我调了1h?真不知道怎么回事,就是一个break打错位置了。。。T3一开始没有仔细想,后来发现是个水题,考完后10min写完了。。。 |
2018.10.11 | CF Edu Round 52 | 6(4) | 莫名其妙打的极好,但还是有问题,第四题的代码其实存在问题,0,1,2打成了1,2,0所幸没有人发现也没有人hack我。。。 |
2018.10.14 | CF Round #516 | 2(398) | 打得极差。。。主要是卡在B题上1h左右,事实上B题不管怎么做都能做出来。。。感觉如果开D说不定还能翻上去,我感觉数学题还是比较友好的。。。 |
2018.10.15 | 正睿OI停课训练01 | 400(2) | 简单的比赛 |
2018.10.16 | 正睿OI停课训练02 | 300(2) | 简单的比赛 |
2018.10.16 | 学校模拟赛 | 70(11) | 想出来的分数大概有200+,实际只得到了70,首先是取模除了问题,不够仔细,然后是想法有漏洞,运气又不好,数据不弱,时间不够还有一题没写,然后就爆炸了 |
2018.10.17 | 六校联考02 | 170(57) | 策略出了问题,一直肝T2,事实上T3是个大水题,然后T1写挂了没有测出来 |
2018.10.18 | 正睿OI停课训练04 | 260(3) | 前两题很快搞定,但是T3卡了2h+,事实上就是爆搜,但是一直以为是个性质题,想歪了 |
2018.10.19 | 正睿OI停课训练05 | 200(6) | T3做了3h,最后没开ll挂掉了 |
2018.10.20 | 51nod模拟赛 | 100(3) | 奇怪的比赛,T1明显树dp但是调了3h过不去,非常无聊的卡我的快速幂,T2水过,T3不会做,没有题解,不给看别人的代码,差评 |
2018.10.20 | 正睿OI提高组十连测day8 | 130(10) | 很难的比赛,T2想到正解但是代码太乱常数太大挂掉了,T3想不到主席树有求前k大的和的操作,T1真难 |
2018.10.21 | CF Round 517 | 1(414) | 爆炸了,T1一个很水的策略一开始没想到,T2非要用set加了一个log,而且做得极慢,然后就爆炸了 |
2018.10.22 | 正睿OI联赛停课训练day6 | 240(6) | T1T3都是水题,T2想不到 |
2018.10.24 | 正睿OI联赛停课训练day8上午 | 113(6) | 打得不行啊,T1水题公式变形没看出来,T2想到接近正解但是实际上还有细节没有考虑,T3很难,完全不会,暴力应该可以拿不少分但是没有去打 |
2018.10.25 | 正睿OI联赛停课训练day9 | 300(2) | 原题场,没啥意思 |
2018.10.25 | CF Edu Round 53 | 4(328) | C一个地方一开始忘记判断导致罚时爆炸,D最后20min rush出来但是存在问题 |
2018.10.26 | 省队集训 | 102(20) | T2数位dp没有调出来,别的没什么问题 |
2018.10.27 | 学校比赛(by wzy) | 300(1) | 对时间分治的时候要注意一些细节 |
2018.10.28 | 正睿OI普转提day22 | 130(40+) | 根本不会啊,结论猜不出,想出来正解却没发现自己想出来了,心态有点浮躁 |
2018.10.29 | 正睿OI联赛停课训练day10 | 110(19) | T1没有开long long,100->30,T2没有注意取模非常坑爹,100->30,T3哈夫曼树dp没见过,于是就爆炸了 |
具体分析
在模拟中我出现的问题如下:
1、没有仔细读题
2、动态规划能力严重不足
3、没有仔细检查程序,不好对拍的题没有手动写小样例并测试
4、常数太大,写的时候没有注意常数
5、思考的不够深入,想到就开始写,没有想有没有更好的做法
6、思维不够全面
7、发现程序存在问题的时候只改了一处,忘了改另一处
8、字符串水平急需加强(虽然好像NOIP不考字符串)
9、思考问题不能快速进入状态
10、打错字严重(比如之前用0表示什么状态,1表示什么状态,结果后面就反过来了。。。)
11、不够抓紧时间
12、不能准确判断做题顺序,一直做一道超出能力范围的题目
13、忘记开long long
14、代码写的太长太丑,常数巨大
解决方法
1、认真读题,尤其注意数据范围,测试极限数据能否通过
2、练习动态规划
3、每题都要尽可能对拍,尽量构造比较强的数据和特殊数据
4、不要调用太多常数,注意把可以预处理的部分全部预处理出来
5、不要放弃比赛,当思路乱的时候就去厕所洗把脸,鼓励一下自己
6、好好想题,想得细致一点,想想解法有没有反例或者是可优化的地方
7、每次修改的时候都把程序重新看一遍,看有没有别的地方也会被影响到
8、可能真正比赛的时候状态会好一点?还是要模拟考场环境和氛围,不能老走来走去的,要坐在座位上用纸和笔算
9、仔细敲代码,不要太追求速度
10、把每一题都认真思考十分钟以上,确定哪题比较容易,确定做题顺序
11、感觉怎么都做不了的时候不妨搜索试试,NOIP还是经常有搜索题的
12、一定要记得看要不要开long long
13、多看别人的短小且效率高的代码
做的好的
1、坚持对拍
2、有一场比赛虽然打的不怎么样,但是列出来了每题每个部分分大概要花多长时间写完,按照性价比去写,很好
可以打的模拟赛
学校还有四场
正睿开放的一场17年的模拟
正睿开放的一堆题目
学校的一堆题目
(完了真的做不完了!!!)
小技巧
考一棵树里面选了几个点,并且要有一个联通块包含这几个点的时候,我们可以考虑把点按照dfs序排序,然后联通块的最少边数就是 \(\frac {\sum dis(a_i,a_{i+1})} 2,(a_{n+1}=a_1)\)。
一种常见的dp状态是 \(dp[a][b][c][d]...\) 表示每种物品有几个,假如物品没有区别的时候,我们可以只考虑 \(a \le b \le c \dots\) 的状态,转移的时候也将数量排序再转移,可以大量减少状态数
reverse特别慢,尽量不reverse
char[] 求strlen特别慢,可以记录在变量里,不能反复求,尤其避免
for(int i=0;i<strlen(s);i++)
慢成狗。。。
线性基的小技巧:
我们要维护 \([l,r]\) 的线性基的时候,可以记录下来线性基的 \(i\) 位对应的序号,然后按照序号顺序更新线性基,像下面这样写:
int lb[40],at[40]; //线性基及编号 for(int i=1;i<=n;i++){ //枚举右端 int x=nw[i],p=i; for(int j=30;j>=0 && x;j--){ if(x&(1<<j)){ if(lb[j]==0){lb[j]=x;at[j]=i;break;} else if(at[j]<p){swap(at[j],p);swap(lb[j],x);} //把原来的向下更新 //因为如果两个同时拥有这一位,那么后来的肯定更优 x^=(1<<j); } } for(int x=head[i];x;x=nxt[x]){ //枚举右端点为i的查询,可以用邻接表存储 for(int j=30;j>=0;j--){ if(at[j]>=q[x].l) q[x].ans=min(q[x].ans,q[x]^lb[j]); } } }
Meet in the middle 极好的想法,当数据范围恰好卡着你两倍左右让你过不去的时候,极有可能是Meet in the middle
预处理!!!预处理!!!预处理!!!
好像数数题大部分都要预处理。。。
某一种dp要求你把所有的东西都消除,配对。。。之类的,可以考虑其中的某一个元素,这个元素一定会被消除,配对。。。然后可能能优化一下复杂度
size把 \(O(n^3)\) 的 \(\text{dp}\) 优化成 \(O(n^2)\)
一个数与一群数一个个取 \(\gcd\) 只会有 \(\log\) 种不同的答案,因为每次要么不变,要么变成一半或者更少,然后可以优化一些题
搜索的时候为了不重复可以只搜索单调不降的序列
当题目要求必须选某一个元素或者必须不选某一个元素的时候,可以用前缀加后缀合并得到答案
对时间分治的时候注意撤销操作要从后向前做!!!
合并果子的模型非常常见,当贪心想不出来的时候可以试试看