# 清北冬令营真题泛作

清北冬令营真题泛作

前言

这段时间为了准备冬令营把清北冬令营真题都作了一下。更个博回顾一下(省得大家老说我咕咕咕)。
先写良心PKU的题再写THU的题,
主要是THU的题和PKU比起来真的毒瘤好多......算法

PKUWC2018

[PKUWC2018]Minimax

一个比较显然的暴力是归并排序,每次直接先后缀计算答案便可。
为啥不用线段树合并代替归并排序呢?
暴力线段树合并,合并的过程当中顺便算一下便可,因为权值区间不交因此复杂度一个\(log\)函数

[PKUWC2018]Slay the Spire

顺着题意模拟便可。
强化牌的数值都大于\(1\)意味着多打一张攻击牌不如的多打一张强化牌。
枚举抽中了几张强化牌,当强化牌数量小于\(K\)时,必定是用全部强化牌加上最大的几张攻击牌,
当强化牌数量大于等于\(K\)时,为前\(K-1\)大的强化牌加上最大的攻击牌。
把攻击牌与强化牌按照价值从大往小排序,先算总和最后除方案算几率,随便dp一下就好了。优化

[PKUWC2018]斗地主

九老师:这是我能想到的最好的模拟题了!然而现场无一人得分......我选择死亡。spa

[PKUWC2018]随机算法

这个题仍是有点意思。
\(n\leq 20\)确定是状压DP,很天然想到直接状压已经被\(Ban\)掉的点有哪些。
怎么转移?
把视野放大,考虑全局合法排列的生成,枚举加入最大独立集的点是哪一个,
而后把这个点放到第一个空缺的位置,再把与之相邻点放到后面的任意位置(选对应个空位)。
显然转移过程当中咱们保证了独立集的点之间顺序,因此计数是不重不漏的。
至于要同时求最大值与方案数,两个一块儿DP,维护一下便可。排序

[PKUWC2018]猎人杀

很明显的终止态容斥问题了,枚举谁在\(1\)号猎人后面死,那么剩下的猎人就不用管了。
还有一个问题就是打到了死的猎人怎么办,
这里比较妙,咱们能够认为打到了死的看成鞭尸,再打一次直到打到一个活着的猎人。
根据赌徒输光那套理论,新旧问题显然等价。
列出式子,无穷级数化简后发现容斥系数只与\(w\)之和有关,用分治\(FFT\)就能够计算。游戏

[PKUWC2018]随机游走

使用\(min-max\)容斥转为求任意一个点被到达的指望步数。
这是经典问题,状压DP后树上高斯消元解决。字符串

PKUSC2018

[PKUSC2018]真实排名

来搞笑的吧?讨论一下两个组合数一加就没了。(放普及组T2挺合适的)数学

[PKUSC2018]最大前缀和

一个比较天然的想法:把最大前缀和拆分红两段,前面是最大前缀,后面的每个前缀都小于\(0\)
这样算答案只须要枚举前缀是什么,
后面的部分很好求,设\(g\)如上述,状压DP每次向后插入一个元素时\(check\)一下就能转移。
关于前面部分:设\(f_T\)表示包含\(T\)集合元素,且最大极长前缀和等于全集和的方案数。
智障选手:容斥减去不合法的,发现不合法部分为\(f\)\(g\)的卷积,暴力子集卷积。(显然过不了)。
高智商选手:把向后插入改成向前插入,那么只要保证插入前这个后缀非正,能够很方便的转移。
讲真这题真的有惊艳到我。it

[PKUSC2018]主斗地

很差意思,这题咕了。io

[PKUSC2018]星际穿越

首先能够注意到最多只会向后跳一次,由于跳两次再跳回去绝对没有意义。
其次,因为上述性质,从后面的点跳到前面的点后,前面的点再日后跳也绝对没有意义。
由于若是它后跳后再往前跳一大步,那么它日后跳到的那个点必定能够经过它的来源点直接到达。
而后就能够倍增了,设\(f_{i,j}\)表示\([i,n]\)中的点向左\(2^j\)可达的最左位置(向右跳无论)。
为了算答案同时记\(g_{i,j}\)表示从\(i\)点出发,跳到\([f_{i,j},i)\)这些位置所须要的步数和。
首先\(f\)的转移显然,\(g\)的转移:\(g_{i,j} = g_{i,j-1} + g_{f_{i,j-1},j-1} + 2^{j-1}(f_{i,j-1} - f_{i,j})\)
算答案时,把答案转为后缀相减形式,倍增处理,
为了减小特判,先把起点\(i\)移到\(l_i\),最后再全局加上一步(第一步不管左跳仍是右跳代价都为1)。

[PKUSC2018]神仙的游戏

长为\(i\)\(Border\)存在的条件:不存在\(d\),知足\((n-i)|d\),且\(s_j \neq s_{j+d}\)
问题变为判断\(s_j \neq s_{j+d}\)的存在性,字符集很小,枚举字符用\(FFT\)作匹配便可。

[PKUSC2018]PKUSC

预处理圆被多边形包含的最小半径。
若不包含,求交点后极角排序,对于一段弧,用转角公式求中点,而后判中点是否在多边形内。
因为数据范围很小,因此上述过程所有直接暴力就好了。卡精度警告。

THUSC2016

[THUSC2016]补退选

建一个Trie树,因为字符串很短因此每一个点开个vector暴力存每一个时间的最先出现便可。
查答案时作匹配到对应结点,而后直接查vector就好了。

[THUSC 2016]成绩单

\(g_{l,r,x,y}\)表示区间\([l,r]\)最后一次消除的最大、最小值分别为\(x,y\)的最优方案。
\(f_{l,r}\)表示把区间\([l,r]\)消完的最优方案。
那么显然\(f_{l,r} = min(f_{l,r} + g_{t+1,r,x,y} + A + B(x-y)^2)\),即枚举最后一段在哪里。
关于\(g_{l,r,x,y}\),咱们关键在于记录了最后一次消除的信息(从而实现了跨多段消除)。
连续转移:\(g_{l,r,x,y} \to g_{l,r+1,max(x,w_{r+1}),min(y,w_{r+1})}\)
跨段转移:\(g_{l,r,x,y} + f_{r + 1 , t} \to g_{l,t,x,y}\)。复杂度\(O(n^5)\)松一松就过去了。

[THUSC2016]星露谷物语

不是很会啊......会的大佬教教我呗......

THUWC2017

[THUWC2017]在美妙的数学王国中畅游

把三个函数霉霉展开,而后发现其导数都是循环的。
由于有断边删边操做,因此用\(LCT\)暴力维护一下路径系数和就好了。

[THUWC2017]随机二分图

关于只有\(t=0\)的数据,其答案总和就是一个二分图计数,暴力状压这样就有\(40\)分了。
关于\(t=1,t=2\),只能说陈老师真的神了......
考虑暴力,设\(f_{S,T}\)表示左半边匹配上集合为\(S\),右半边匹配上集合为\(T\)的指望条数。
注意到\(S\),\(T\)\(bit.count\)时刻相同,暴力搜一下能够发现合法状态其实并很少,因此用\(map\)记搜。
在记搜的每一层,首先找到最小的未匹配点\(u\),而后进行决策。
对于\(t=0\)的边\((u,v)\),显然直接加入:\(f_{S,T} = f_{S,T} + \frac{1}{2}f_{S+u,T+v}\)
对于\(t=1\)\(t=2\)的边,考率把它拆分红两条\(t=0\)的边,而后跟上面同样的作。
但这样答案确定不对,考虑一下答案的偏转量,咱们手动修正一下。
对于\(t=1\)的边,
若只有一条边在匹配中,几率为\(50\%\),正确。若都不在匹配中,无影响无论。
若两条边同时出如今匹配中,此时几率为\(25\%\)不对,因此须要额外添加\(25\%\)的几率进行修正。
对于\(t=2\)的边,
若只有一条边在匹配中,几率为\(50\%\),正确。若都不在匹配中,无影响无论。
若两条边同时出如今匹配中,此时几率为\(25\%\)非法,因此须要额外减小\(25\%\)的几率进行修正。

[THUWC2017]大葱的神力

关于点\(1\),爆搜便可。
关于点\(2\),拿点\(1\)的爆搜程序跑上个十几分钟就能跑出来。
关于点\(3\),裸背包直接作。
关于点\(4,5\),每一个抽屉的容积同样,因此就是二分图最大权匹配,\(KM\)便可。
关于点\(6\),抽屉的容积差别几乎没有,因此依旧跑二分图最大权匹配就能得解。
关于点\(7\),发现只有第一根萝卜比较诡异,暴力枚举一下它放哪里,剩下的依旧\(KM\)解决。
关于点\(8,9,10\),退火随机化,至于能有多少分看脸。

THUSC2017

[THUSC2017]巧克力

看到\(K\)那么小显然枚举一下巧克力集合,
而后若是无论第二问那么问题变为了关键点生成树,用斯坦那树搞搞这样就有\(56\)分了。
关于第二问其实也是一个现套路。
二分中位数,把小于等于\(mid\)的点设为\(-1\),大于\(mid\)的点设为\(1\)
那么咱们但愿在点数最少的前提下,上述权值也最小,故只须要把点数的权值设的很大就好了。
最后一个问题在于巧克力种类不少的时候怎么办。
把巧克力种类随机映射到\([1,K]\)而后多作几回上述算法,听说能够证实这样正确率高达\(99\%\)

[THUSCH2017]杜老师

问题转化每给定一个集合,求知足异或后每一位为\(0\)的子集个数。
一种\(50\)分:按照大于\(\sqrt{MaxR}\)的质因子分组,把其余质因子暴力状压\(DP\)
另外一种\(50\)分:子集异或为\(0\)显然可使用线性基高斯消元,最后\(2\)的自由元个数次幂即答案。
结合一下就有\(80\)分:
线性基中不保存大于\(\sqrt{MaxR}\)的质因子的基,分组后外部消一下这一位而后再插入到线性基中。
再结合一个结论:当区间大于\(6000\)时,答案即区间内出现的质因子个数。
而后就可以\(AC\)辣!是否是很棒?

[THUSCH2017]换桌

显然是个二分图最大权匹配问题,裸跑\(KM\)白送\(70\)分不谢。
考虑优化建图。
显然每张桌子的位置之间能够顺次连边,这样每一个点就只用向可达桌子的对应位置连边了。
然而这仍是只有\(70\)分。
如今的问题主要在于桌子与桌子之间的连边,考虑线段树优化。
对于\(m\)个位置分别开两棵线段树,分别表示向左走和向右走,每次移向子树时加上对应距离便可。

[THUSC2017]大魔法师

若是把三个元素当作向量的话(后面再加一个区间长度),
那么不难发现每种修改对应乘上一个矩阵,而矩阵又有乘法结合率,因此用线段树维护。

[THUSC2017]若是奇迹有颜色

看到环先套一个\(Polya\),问题转化为求大小为\(n\)的合法环的方案数(不考虑同构)。
考虑暴力怎么作,咱们的难点在于要保证首尾合法。
能够这样:暴力压\(m^{m-1}\)种状态(最靠前的一个点能够不计),而后把转移矩阵当作临接矩阵。
这样咱们只须要保证转移若干次后回到本身便可。
\(m>5\)时,矩阵过大显然会\(TLE\)
咱们本地暴力\(DP\)(方法跟上面同样,只是暴力转移不要构矩阵)把每个\(m\)的前\(1000\)项跑出来。
把这些数据扔到\(BM\)里去,发现居然存在递推式!(当\(m=7\)时,递推式长度达到最大为\(410\))。
而后暴力\(Polya\),内部算方案直接用递推式,矩乘依旧没法经过此题因此须要使用\(CH\)线性递推。

[THUSC2017]宇宙广播

\(K=2\)求两个圆的公切线便可,注意由于不保证相离,且半径可能为\(0\)因此须要特判一堆东西。
根据题目定义,超平面点集到两个点\(S(s_1,s_2...s_K)\)\(T(t_1,t_2...t_K)\)的距离相等。
不可贵到:\(\sum_{i=1}^K (s_i^2-t_i^2) = \sum_{i=1}^{K}2(s_i - t_i)x_i\)
因为\(S\)\(T\)不定因此形式化的能够写成:\(\sum_{i=1}^K a_i x_i = d\)
由点到超平面的距离公式:\(dis = \frac{|\sum_{i=1}^K a_ix_i - d|}{\sqrt{\sum_{i=1}^K a_i^2}}\),不妨设\(\sum_{i=1}^K a_i^2 = 1\)
那么对于每一个圆\(p\),有方程:\(|\sum_{i=1}^K a_i x_{p,i} - d| = r_p\)
咱们暴力枚举每一个圆的绝对值状况,而后把\(a_i\)写成\(k_1d + k_2\)形式,带入\(\sum_{i=1}^K a_i^2 = 1\)就能得解。
这样咱们就能够求得所需的超平面了。
已知(百度来的)超平面的法向量就是定义中的\((a_1,a_2...a_K)\),因此天然就能够求切点了。

相关文章
相关标签/搜索