牛客挑战赛69题解

A

考虑用容斥解决问题。

排列数:n!n!

没有位置 piip_i \not = i 的排列数:11

恰好 2 位置 piip_i \not = i 的排列数:(n2)\binom{n}{2}

恰好 3 位置 piip_i \not = i 的排列数:2(n3)2\binom{n}{3}

那么可以得到答案为 n!1(n2)2(n3)n!-1-\binom{n}{2}-2\binom{n}{3}

B

结论:David 必胜。

证明:考虑归谬法。不妨假定 Adam 必胜,设 David 第一步选点 1 的时候 Adam 会选择点 xx。那么 David 第一步直接选 xx 即可获胜,所以假设不成立。

C

sol1

设精度限制 ϵ=109\epsilon=10^{-9}

性质:最优的圆必然和一条边相切。如果不然,则由于所有点共线,可以向垂直于线的方向“挤”圆,使其贴到边上。

所以直接二分半径,对于一条边,每个点对应着一段开区间,代表切点不可能在这段区间内。对所有区间取并看有没有剩余的即可。注意要把两边的限制也判断进去。

几个优化:

  1. 由于当点的 xx 坐标有序时,所有的区间的中点递增,所以可以不用每次二分判定的时候排序,可以少一个 log。
  2. 另一个性质是,圆的半径至少是 min(n,m)/4\min(n,m)/4,因为将长方形横着切一刀,竖着切一刀分成四块,一条直线最多经过三块,另一块的最大圆就是下限。所以直接二分 logϵ1\log \epsilon^{-1} 轮即可将相对误差减小到 o(ϵ)o(\epsilon)

优化完后的复杂度为 O(klogϵ1)\mathcal{O}\left(k\log\epsilon^{-1}\right),不加优化也能过,但是会被卡精度,要开 long double,失策了,谢罪。

sol2

考虑分类讨论限制圆范围的因素。

  • 圆被对边限制

核心即为判断 min(n,m)/2\min(n,m)/2 的半径能否存在,显然圆心只有可能在一条线段上。

每个点对应一段区间,使得圆心不能在区间内。求区间并判一下即可。

  • 圆被两条邻边和一个点限制

对于一个角,对所有点计算以这个点为限制时的半径,取最小值即可。

  • 圆被两个点和一条边限制

注意到每个点的限制是一条抛物线,考虑将两条抛物线求交以后判断。

先特判掉 y1=y2y_1=y_2 的情况(否则后面可能不是二次方程)以及 y=0y=0 的情况(注意到这不优于第二类限制),然后就可以直接将两条抛物线的解析式求出来,作差以后用二次方程暴力解横坐标。也可以手推抛物线交点的式子,过程略,最后的结果是,对于两个点 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2),满足限制的圆交点的横坐标为:

x=x1y2x2y1±y1y2((x1x2)2+(y1y2)2)y2y1x=\frac{x_1y_2-x_2y_1\pm\sqrt{y_1y_2((x_1-x_2)^2+(y_1-y_2)^2)}}{y_2-y_1}

对于每个可能的横坐标,用对应的解析式求出纵坐标(即半径)后再根据边的条件判断是否合法即可。

复杂度 O(k)\mathcal{O}(k)

D

令硬币的正面为1,反面为 -1,游戏结束等价于前缀和序列的极差 =n=n

f(i,j)f(i,j) 表示极差为 ii,目前前缀和比历史最小值大 jj 时接下来 Rikka 的胜率,容易得到边界条件 f(n,0)=0,f(n,n)=1f(n,0)=0,f(n,n)=1

发现递推式子形式十分简单,直接展开即可。令 k=1ppk=\frac{1-p}{p},则答案为 nkn1n+1kn+11\frac{n}{k^n-1}-\frac{n+1}{k^{n+1}-1}。(注意特判 p=12p=\frac{1}{2}

具体的,我们定义一个数列 A1,A2,,AmA_1,A_2,\cdots,A_m 是好的当且仅当对于 i[2,m1]i\in[2,m-1]Ai=pAi+1+(1p)Ai1A_i=pA_{i+1}+(1-p)A_{i-1}

容易发现下列数列是好的:

  • f(i+1,0),f(i,0),f(i,1),,f(i,i1),f(i,i),f(i+1,i+1)f(i+1,0),f(i,0),f(i,1),\cdots,f(i,i-1),f(i,i),f(i+1,i+1)

k=1ppk=\frac{1-p}{p} ,可以发现对于好的数列有 Ai+1Ai=k(AiAi1)A_{i+1}-A_{i}=k(A_i-A_{i-1})

Fi=f(i,i)f(i,0)F_i=f(i,i)-f(i,0),有 Fi=Fi+1×j=1ikjj=0i+1kjF_i=F_{i+1}\times \dfrac{\sum_{j=1}^{i}k^j}{\sum_{j=0}^{i+1}k^j}

=Fi+1×k(1ki)1ki+2=F_{i+1}\times\dfrac{k(1-k^i)}{1-k^{i+2}}

=1(1kn+1)(1kn)×kni(1ki+1)(1ki)=\dfrac{1}{(1-k^{n+1})(1-k^n)}\times k^{n-i}(1-k^{i+1})(1-k^i)

f(i,0)f(i+1,0)=1j=1ikjFi=1k(1kn+1)(1kn)(kni1kn)f(i,0)-f(i+1,0)=\frac{1}{\sum_{j=1}^{i}k^j} * F_i=\dfrac{1-k}{(1-k^{n+1})(1-k^n)} * (k^{n-i-1}-k^n)

f(0,0)=i=0n1(f(i,0)f(i+1,0))=(1kn)n(1k)kn(1kn+1)(1kn)=nkn1n+1kn+11f(0,0)=\sum_{i=0}^{n-1}(f(i,0)-f(i+1,0))=\dfrac{(1-k^n)-n(1-k)k^n}{(1-k^{n+1})(1-k^n)}=\dfrac{n}{k^n-1}-\dfrac{n+1}{k^{n+1}-1}

E

fS,if_{S,i} 表示已经选了 ii 个集合,还要选集合 S 的贡献之和。初始值是 fS,0=bSf_{S,0}=b_S,答案即为 f,if_{\empty,i}

依次从状态的点集合中剔除点 0,1,...,n10,1,...,n-1,转移可以通过 FWT 优化,时间复杂度为 i2(ni)2i=O(n22n)\sum i^2(n-i)2^i=O(n^22^n),可以通过。

F

比较套路的题。这式子是超几何函数,微分有限,所以 f(0),f(1),,f(n)f(0),f(1),\cdots,f(n) 可以写成整式递推的形式,暴力找出递推式后直接递推即可,时间复杂度 O(n)O(n)

全部评论
与朋友鏖战 D 三个小时无果,为什么这么难
1 回复 分享
发布于 2023-06-17 01:15 江苏
能否具体说明一下F的整式递推形式啊
点赞 回复 分享
发布于 2023-06-17 15:11 广东

相关推荐

评论
7
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务