NOIP以前可能会持续更新
写在前面
NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾。不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉就真的要滚大粗退役回去念书了QAQ。于是有了压力就来刷(水水水)题。感觉校内OJ的题库还挺多的就开始做校内OJ的题。(本校的其他神犇都在其他各种OJ上屠丧题我感觉好虚啊!)于是把这几年NOIP的原题拿出来做了下。
(我蛮立个flag:如果NOIP过了就买BZOJ权限号。。。)
历年NOIP提高组一句话(口胡)题解
NOIP2015
D1T1神奇的幻方
:小模拟,当时too young too simple考场花了0.5h才过。
D1T2信息传递
:找最小环,考场上队开小了丢了40pt,懒得再写就把考场上代码改了一个地方过了。
D1T3斗地主
:张哥哥出的大爆搜游戏题= =b。。。当时naive连30pt都没拿到。后来听了题解才知道是贪心+爆搜顺子。刚听完题解的时候没听完整于是连单牌对子3带1什么的也拿去爆搜了,于是就一直TTT。。。再看了一遍题解才知道除了顺子以外的都可以贪心= =b。。。顺便做了下uoj的斗地主加强版,感觉好恶心啊= =b,各种97分,Wrong Answer on extra test x。好惨啊,于是就把贪心推了改成DP了才终于过了。。。
D2T1跳石头
:考场上貌似没判最后一块石头到终点的情况。运气好过了90pt。懒得调考场代码于是就重新敲了一遍过了。
D2T2子串
:不会DP是硬伤啊~记f[i][j][k][0/1]为做到i位取/不取时,B串匹配到第j位,被分成k段的方案数,然后瞎jb乱DP一下就好了。
D2T3运输计划
:二分+树上差分。好像其他神犇有并查集等只有一个log的做法的。然而我看不懂。。。我因为太弱只看懂了二分+差分的log方的做法:先二分一个答案,然后最优化问题就转化为了判定性问题。维护所有大于这个值的链的交,这个可以用树链剖分来在dfs维护差分标记来实现。然后把链的交上的最大的拿去变0,如果最长链-这个最大值小于等于这个值显然就是成立的。被uoj的extra test卡常数卡得欲仙欲死
NOIP2014
D1T1生活大爆炸版石头剪刀布
:模拟。
D1T2联合权值
:好早以前过的题了= =b,应该强行不难吧。。。
D1T3飞扬的小鸟
:挺丧病的DP。转化为完全背包来求解。转移很多注意细节= =b。
D2T1无线网络发射器选址
:模拟。
D2T2寻找道路
:反着搜一遍再正着搜一遍。
D2T3解方程
:一道挺玄学的题。(据说uoj这题不开放hack,好像只要对着模数卡都能卡掉)做法是取几个质数p然后预处理出0~p-1的数能否使得这个多项式在模p意义下值为0。接着再枚举1~m,看一下i%p是否成立,如果你取的所有质数都是成立的,那么这个数有很大概率就是方程的根(雾。好像bzoj上的数据加强过,把20000以内的质数都卡掉了。
NOIP2013
D1T1转圈游戏
:快速幂。
D1T2火柴排队
:转化成逆序对模型,然后用归并或树状数组来做。
D1T3货车运输
:带权并查集或者倍增。(我写的是倍增,然而带权并查集跑得更快)
D2T1积木大赛
: 结论题。差分以后正的加起来。
D2T2花匠
:最长波动子序列。DP。
D2T3华容道
:码农图论题。把图预处理出来以后跑SPFA。
NOIP2012
D1T1Vigenère 密码
:模拟。
D1T2国王游戏
:按a*b贪心,比较坑爹的是要写高精度。
D1T3开车旅行
:倍增。用排序+链表处理出一个点的前驱后继什么的就可以求出每个点A和B跳到哪里。第一问和第二问的做法都很相同。
D2T1同余方程
:exgcd模板题。
D2T2借教室
:二分+差分。
D2T3疫情控制
:二分+贪心+树链剖分/倍增。细节题啊!情况非常多。我们发现答案是单调的,于是就先二分一个答案,然后军队就可以总结成两种情况:可以跳到根的和不能跳到根的。先把不能跳到根的就跳尽量往上跳。然后对于那些能跳到根的,如果当前的大的子树内的叶子已经都封住了那么跳到根不然就选一个离根最远的跳到离根最近的节点。然后将可以跳到根的军队的剩余时间和需要军队的子树的距离都排序,从大到小匹配即可。
NOIP2011
D1T1铺地毯
:模拟。
D1T2选择客栈
:DP。社会实践的时候无聊在手机上写的。记一下上一次同色点的位置和上一次小于p的点的位置,还有之前有多少个同色点,然后分两种情况转移就好了。
D1T3mayan游戏
:人民群众喜闻乐见的大爆搜游戏题。好早以前校内训练的时候写的。有时间一定要再写一次
D2T1计算系数
:二项式定理。
D2T2聪明的质检员
:二分。我们注意到Y关于W的函数是一个单调递减的函数。于是我们就假装这个函数与Y=S这条直线有交点,那么就可以二分。二分出来“零点”以后前后减一下看看哪个更小就好了。
D2T3观光公交
:细节贪心题。据说考场上有神犇半小时想出贪心策略然后a掉了我们发现每个加速器的贡献是独立的,所以我们可以贪心。考虑一下一条路使用加速器对于答案的贡献,恰好是这条路终点到下一个停车点中间的下车人数。所以我们对于每一个加速器枚举用在哪条路上是最优的,然后每次再维护一下停车点的改变(因为使用了加速器以后可能会导致原来不停车的地方停车了)。所以对于每次的加速器都重复这个操作就好了。
NOIP2010
乌龟棋
:很基础的DP题,然而我在省夏之前还不会(我好弱啊)。把牌的数量来记状态。然后就可以转移啦。
机器翻译
:直接用队模拟。
关押罪犯
:二分+并查集判是否能构成二分图。这个做法理论上是对的,但不知为何在VijosTLE了。于是就改成了把边排序以后往里面加边直到不是二分图为止。
引水入城
:拓扑排序。我记得省夏讲过这道题。。。从第一行每个点出发到达最后一排的点的集合必然是一个连续的区间。然后原图用偏序关系表示的话就是一个DAG,我们逆着拓扑序把区间贡献上去,然后最后再用第一行的线段做一遍最少区间覆盖就好了。细节有点多的题,不过想清楚了再写应该就会比较好写。
NOIP2009
潜伏者
:直接模拟。
Hankson 的趣味题
:好像正解是什么神奇的做法。然而我根号枚举好像就过了。。。
最优贸易
:正着SPFA一遍求出路径上最小值再反着SPFA一遍求出路径上最大值。
靶形数独
:又是人民群众喜闻乐见的大爆搜游戏题。好像好多人都用DLX的样子。然而我并不会DLX于是就想静态确定搜索序。然而搜索姿势不对被卡了一整个晚上QAQ最后强行改成n+e学长的搜索姿势才跑的过去TAT。感觉还是有时间去学学DLX比较稳吧。
NOIP2008
笨小猴
:模拟题。
火柴棒等式
:模拟题。
传纸条
:二取方格数。费用流在Vijos上TLE了差评!!!我洋洋洒洒敲完费用流模板结果交上去TLE了简直不爽。于是就改成多线程DP。
双栈排序
:网络上的题解貌似都是O(n^2)的?可是我不太会,我只会贪心,于是调了巨多发才过。也可能是原题数据比较弱没卡贪心?我也不知道我的贪心正确性如何,不过复杂度比正解优,是线性的。
NOIP2007
统计数字
:计数排序。
字符串的展开
:细节模拟。
树网的核
:把最长链搞出来然后用双指针单调队列搞一搞。复杂度线性。
矩阵取数游戏
:挖个坑。。。代码还来不及写。我觉得题解大概是一个区间DP+高精度。
更早的NOIP
[NOIP2006]能量项链
区间DP。
[NOIP2005]过河
DP。类似离散化的结论,减少了无用的转移状态。
[NOIP2005]等价表达式
双栈表达式解析。细节题!!!
[NOIP2005]篝火晚会
结论题。答案会等于最少有多少个数不等于它在环上的下标。会等于n-偏移量的最多的出现次数。
[NOIP2002]字串变换
双搜。用map/hash来维护一下搜索到某个串的步数。学到的新姿势:双搜的时候可以直接用两个队一起bfs,不用一个先bfs一半另一个再bfs一半。
[NOIP2000]三取方格数
费用流或多线程DP。
其他的刷题记录
2016.10.26
BZOJ2815:[ZJOI2012]灾难
在DAG上用倍增构造支配树。答案就是支配树的子树大小。(NOIP难度的校内训练出这道题的加强版,把模型转到了最短路DAG上。其实就是初赛最后一题的加强版,而且还丧心病狂地卡SPFA,我改了堆优dj才过。)
2016.10.28
BZOJ1968:[Ahoi2005]COMMON 约数研究
推了一个式子,发现其实是看了zzx代码答案是
。
BZOJ2749: [HAOI2012]外星人
数论好题。由于我思维能力太弱,看了题解才会做。原问题可以转化为原数经过变化后能产生的2的个数。然后这个东西是积性函数可以用线性筛筛出来。
2016.10.29
AtCoder Grand Contest 006
第一次打AtCoder的比赛,结果两题滚粗了QAQ,第一题字符串模拟,一开始写了一个乱七八糟的模拟结果连样例都没过,赶紧推掉又写了一遍过了。第二题一个数学构造题,我枚举了很多种情况然后发现就是1~2n-1的排列左右移几位得到,在20min左右的时候才a掉。第三题一个奇怪的求期望题,不会QAQ。第四题想了好久都想不出来,Paladin想出正解强行rush没rush出来。第五题第六题不会QAQ。为什么我这么弱啊!什么题都不会。
2016.10.30
AtCoder Beginner Contest 046
果然还是入门比赛适合我= =b。第一题模拟,第二题简单的染色计数,第三题是一个有一点思维难度的贪心,第四题模拟。Paladin说他17minAK的比赛,我做了挺久的果然还是太弱鸡了。
AtCoder Code Festival 2016 qual C
挺好的一场比赛。第一题模拟,第二题贪心,第三题应该也算模拟吧?第四题一个有点思维难度的DP。第五题感觉是一个什么奇怪的康托展开的题?但是不会。。。
2016.10.31
AtCoder Code Festival 2016 qual C E
一整天+第二天的一个早上才搞出来的题。看了题解+看了别人代码+CJK学长的讲解以后才勉强能推出式子来QAQ,果然我独立推式子的能力还是太弱了!!!用树状数组来优化康托展开,然后剩下的都是推式子。一道细节多的题,感觉考场上两版的人都a的题而我想了两天我还真的是弱啊。。。
2016.11.02
埃及分数
一道挺细节的搜索题。迭代加深搜索+上下界剪枝。
2016.11.03
AtCoder Regular Contest 062 E
神奇的组合排列计数问题。枚举两个面,那么整个正方体的八个角的颜色就被确定了。只要查询一下每一个面有多少个满足条件的正方形即可。(注意判有循环节的情况,这样只能放一种)脑洞细节题!!!(做AtCoder的题的时候深深地感受到了:日本人的数学真厉害啊!几场比赛下来难都是数学题。)
[poj1152]矩形面积并
扫描线+线段树。线段树的节点记录这个点被覆盖了几次、被覆盖了的大小是多少。然后每次只要查询一下整个区间的答案就好了。因为这题查询是查询一整段,所以标记可以不用下传,标记永久化即可。(思考:这题能否用更高效的zkw线段树来解决?)
AtCoder Code Festival 2016 qual B A~D
做完几场AtCoder的比赛感觉这里的题都偏向于思维难度以及一些代码实现的细节。AB两题模拟。C题是给一个网格图,然后每一行的纵边和每一列的横边的边权都是相同的,求最小生成树。Kruscal的一个奇怪姿势,找了一个性质就发现过了。D题贪心。(连题目名字都有贪心,题解也是贪心)策略大概就是使得卖出的物品的价格尽量地小,大概就是贡献完答案之后的前缀max+1。E题被同学翻译错题目了QAQ。本来是求一个串的rank,被同学翻译成求k小。。。交了一个trie树的暴力T了12个点卡了一发评测姬QAQ。正解以后(大概是明天?)再写。。。
2016.11.04
AtCoder Code Festival 2016 qual B E
Trie树上DP。记f[i][j][k]表示当j字母的字典序在k字母之前时,字典序一定比第i个串小的字符串有多少个。这个可以在Trie上DP来预处理。每次询问的时候处理一下26*26个偏序关系就好了。时间复杂度为 O(总的串长∗26+询问次数∗26∗26) 的。
2016.11.05~11
生病了病了一周QAQ。
2016.11.12~14
学校半期考QAQ。
2016.11.15~18
虽然还在半期考但是数学考挂以后文化课就弃疗了,于是重新开始写题。
15号到18号的做题记录就是把NOIP原题从10年做到07年。题解口胡见上。