NOIP2016提高组口胡题解

版权声明:既然是蒟蒻写的文,那么各位大爷就将就着看吧~ https://blog.csdn.net/alan_cty/article/details/53326921

来来来,让我们来口胡一波

Day1

T1

直接模拟呀!下标都-1然后用%就好了

T2

本次比赛最难的一道题。
目前据我所知有三种算法
首先,我们考虑转化题目。
把链拆成两条,一条向上,一条向下
如果一个点x,可以到达它的s在下面,那么满足dx+wx=ds
如果t在下面,那么满足dxwx=dtlent
其中len表示总长,d表示深度
发现左边都是一个定值,右边都只和s/t有关
那么我们的问题就变成了求以一个点为根的子树中有多少个权值为x的点
最暴力的想法就是直接线段树合并+动态开点
复杂度O(N log N),常数有些大CCF老爷机。。。。

然后我们发现我们只关心某个子树中一个值出现的次数。
那么我们在dfs之前记录一下这个值之前出现的次数,dfs后记录一下
两次相减就是我们要求的答案
lca用tarjan就可以做到O(N)

我用的方法比较辣鸡
我们发现如果是链上的就可以O(N)解决,头尾打上tag然后开个桶扫一遍就好了
现在上树了呢?
那就链剖喽
复杂度也是O(N log N),不过常数小一点,卡卡常就可以碾过去了

T3

首先最短路弗洛伊德(你想跑迪杰斯特拉加heap我不拦着你)
然后设Fi,j,0/1表示前i堂课,用了j次换课,且第i次换还是不换的最小期望长度
我们发现两堂课之间的期望是独立的,只和两端的状态有关,根据期望的线性我们可以直接把它加起来。
然后就随便DP一下就好了。
还是需要卡常。。。

Day2

T1

杨辉三角求组合数%k,然后二维前缀和

T2

首先可以把所有蚯蚓还原到0时刻的长度
注意先切掉的所分裂出来的蚯蚓一定比后切的分裂出来的要先切
于是开三个队列,维护原来的蚯蚓,切掉的第一/二段
复杂度O(M)

T3

首先状压,暴力枚举两个点求抛物线,暴力转移2^N*N^3
预处理选两个点能影响到的点,转移2^N*N^2
发现我们的目标是全清,而且最优策略和顺序无关,于是可以强制一定要打掉编号最小的那只猪。
O(2^N*N)
发现这道题中有用的状态不会太多。
而且状态之间的转移构成了一张DAG
那么就直接bfs一遍求最短路就好了
O(玄学)
某Howar 打这个东西民间数据5ms大跳楼

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页