【一堆题】最近学长们出的一些题的一些记录(no code!)(未完待续)
,,这十来天刷了好多好多好多学长们的题,从rgnoH到sparrow到OBlack到wxh到hsq等大神们出的模拟题,由于十分地忙,一边忙着改题一边又要赶作业一直没时间做一些总结,,还是小小的汇总的记录在一篇文章里吧orz(待填坑)
其实上一道井字棋也特别有意思,就是给出一张井字棋图,判断赢输平。而当时我不会博弈(然而现在也不会),第三题毒瘤不会啊orzorzorz
from rgnoH学长
唐老师的题不存在使人自闭orz orz 就是卡常太毒orz orz
四边形上树
大致题意:一棵n个结点的树(n<=1e5),每个结点上有权值(<=1e9),两种操作: 1. 修改点权 2.询问一条简单路径上是否能找到4个点,以他们的点权作为边长的四边形。 我们知道四边形构成条件就是存在三条短边和是否大于长边。那么我们考虑不存在四边形的情况,我们发现要构造一条路径上尽可能多的点使他们仍然不可以构造出四边形应当如 1,1,1,3,5,9,17,31......之后我们发现其实他的节点权值增长速度是飞快的,在36的时候就会超过1e9,那么我们找一条路径,他超过36个点直接puts("YES"),否则暴力跑36个点即可。calc
大致题意:给定图n点,m边,一个lim表示对于连边<u,v> 满足| u-v |<=lim(n,m<=30,lim<=8),图中每个点度数都为都属。求最后图的方案数,对998244353取模。 dp[x][y][v][zt]其中zt是一个二进制状压。这个状态表示讨论x与y连边(只考虑大点往小点连边,现在还剩余v条边连,然后以x点为个位往前共lim位的度数奇偶情况(1为奇0为偶) 那么转移1.x和y连边-->dp[x][y][v-1][zt^1^(1<<(x-y)] 2.y-1并且判断x-y是否超过lim,3.x-1。 最后当v=0的时候(边全部连完的时候)方案数1.然后记忆化搜索实现就可以了。(这个状压值得体会一下)from sparrow学长
sparrow学长的题可以说就是相当的毒了orz,似乎就是整个暑假我考得最蒟的两天(虽然本来就很蒟)。dfs序
大致题意:给定一张简单联通无向图(n<=14),求这张图有多少种可能的dfs序。 看到n<=14,咦,这一定是一道状压DP!然而太蒟蒻不会啊orz. dp[S][x]表示在dfs过程中已经走了S集合的点,目前处在x点的位置上,还能走出来的dfs序有多少种。由于S无法再走,我们视作从经过了S,从x出发又最多回溯到x的dfs序种类。 考虑转移,我们枚举x能到的每一个v,并且对于这个v有一个最大的联通集合为T。那么就有dp[S][x]=sigma( dp[S|v][v]*dp[T|S][x]) 这个是因为在选了v后,那么就dfs一定会将T全部走完。那么再类似背包选物品的一样,就可以得出答案了。lunch
大致题意:bzoj3749 一个很鬼畜的DP,,,,下面一个我做题上的一个笔记。*
dp指代从哪个状态转移过来
dp[0][x]菜不吃
dp[1][x]菜左吃 dp[2][x]菜右吃
dp[3][x]菜都吃(分赃)
由dp[][i-1]转过来
dp[0][i]2 a[i-1]>=a[i]
3 a[i-1]/2>=a[i]
dp[1][i]0 a[i-1]<=a[i]
1 a]i-1]/2<=a[i]
dp[2][i]2 a[i-1]/2>=a[i]
3 a[i-1]>=a[i]
dp[3][i]0 a[i-1]<=a[i]/2
1 a[i-1]/2<=a[i]/2
*/
from wxh学长
大致题意:现在有一个背包,既有容量限制,又有个数限制。然后有k个物品,求能带走最大重量。(n,k<=40)
很精妙的做法(sky,sky,skywalker!)我们将所有的物品分成两半。对于其中任何一半都可以2^20内完成处理,然后将其中一个的重量,与另一个的剩余空间来搞个二分,就能找到最后剩余空间最少的装量,完成求到最大重量了。 我才不会告诉你某OJ爆搜跑得比正解快呢
三级甲
大致题意:现在有一个数组长度n,然后m次询问,每次有一个k,每次求长度为k的所有区间最小值和n,m,k<=1e6
分析每一个元素对不同询问区间长度的贡献,我们会发现他会长成一个类梯形。(l指到左边第一个比他小的元素的距离,r为右边第一个比他大的元素的距离),从min(l,r)结束上升,到max(l,r)结束平行,到l+r完成。事实上我们可以把它看作一个类似等差数列的东西,然后略差分一下就可以搞了(雾)