BNU-2017.7.4排位赛2总结
链接:https://www.bnuoj.com/v3/contest_show.php?cid=9147#info
A题
sort之后交换首尾两个数。
B题
for一遍,如果每个数都在对应位置了,输出n;否则看一下不在对应位置的每个位置,是不是再映射一次以后恰好是自己,如果是cnt+2;否则cnt+1。
C题
一堆数任意乱减,减的结果不会超出n个数的gcd。而且所有可能得到的数是gcd*k,k是正整数,且gcd*k<=max{ai}。就看这些数中不在ai中的个数的奇偶性就行了。
D题
概率dp+状压dp。dp[S]表示S状态到达全1状态的期望次数。dp[(1<<n)-1]=0,然后从后往前推。
dp[S]=Σpi*(dp[S|i]+1), 0<=i<n。有一些状态dp[S|i]=dp[S]移到等式左边去就可以化简出dp[S]的公式。
E题
给n个点,问能选出多少个凸四边形。考虑对立面,看能选出多少个凹四边形,凹四边形必定有且仅有一个顶点被其他三个点构成的三角形包含。
所以枚举被包含的点O,然后再求有哪些三角形包含了这个点O。
再次考虑对立面,看哪些三角形没有包含这个点O。
以这个点O为中心极角排序后,枚举三角形的其中一个点A,然后去找另外两个点B,C,使得ABC不能包含O。
这个条件的等价条件是OA*OB>0且OA*OC>0,或者OB*OA>0且OB*OC>0,或者OC*OA>0且OC*OB>0。由对称性,只检验一个即可,这样每个三角形恰好选了一次。
F题
最小循环节长度=len-next[len]。
G题
差分约束系统,在维基百科上概念将的很清楚:https://zh.wikipedia.org/wiki/差分约束系统
但是上面没说当一个点确定的时候,其他点距离他的最大值怎么求。实际上要求S-T的最大值,只需要做T到S的最短路即可。如果要求S-T的最小值,只需要转化成T-S的最大值。
H题
方法1:x轴和y轴都离散化,然后这样以后本质不同的行只有O(400)个,相同的行可以通过一行做完然后做乘法来累加,每一行离散化以后直接暴力染色。
方法2:200*200条线把空间分成O(40000)个区域,每个区域可以用一个点做100次检验来得到颜色。
然而当时这两个方法都因为我colors写成color给挂掉了……
I题
待读题。