Codeforces8月解题报告

Codeforces8月解题报告

不定期更新

EDU Round 133

A, B水题

C. Robot in a Hallway

题意

从起点(1,1)(1,1),在2×n2\times n的棋盘上行走,不重、不漏地走过所有格子。每个格子上有一个数ai,ja_{i,j},满足在ai,ja_{i,j}时刻之后才能走向那个格子。求走完所有格子的最小时间。

分析

由于是2×n2 \times n的棋盘,并且满足不重不漏,那么前面一段必定是类似蛇形的走法,后面半段则是走到最右之后返回。

那么前面半段采用搜索的方法,枚举蛇形的终止位置,记录走完蛇形的最小时间。然后后面半段可以用类似前缀和的方法。

假设我从(1,1)(1,1)就直接往右走,那么走完第一行的最短时间就是max(a1,ii)+n1max(a_{1,i} - i) + n - 1,其中max(a1,ii+2)max(a_{1,i} - i + 2)是等待时间,n1n-1为步行时间。这里只是特殊情况,一般情况还需推导。

这题主要就是要推式子,没啥思考

D. Chip Move

题意

给定n,kn,k,从00出发,第ii步可以走(k+i1)(k+i-1)的倍数(正数)的距离,求走到x[1,n]x \in [1,n]的方案数,对每个xx都分别求。

分析

挺水的一道题。
最朴素的做法:状态f[i][j]f[i][j]ii步,到达jj的方案数。转移枚举第ii走的距离,有f[i][j]=lk+i1f[i1][jl]f[i][j] = \sum_{l | k+i-1} f[i-1][j - l]
然后发现距离的转移可以优化:f[i][j]=f[i1][j(k+i1)]+f[i][j(k+i1]f[i][j] = f[i-1][j-(k+i-1)] + f[i][j-(k+i-1],这样复杂度就是O(n2)O(n^2)了。
又因为每一步走的最少距离是递增的,所以最多走n\sqrt{n}步,所以层数为n\sqrt{n},总共的时间就是O(nn)O(n\sqrt{n})。空间滚动数组优化到O(n)O(n)

E. Swap and Maximum Block

发现操作和与异或有相同的性质,可以将[1,2n][1,2^n]区间像线段树那样划分,每个区间节点维护所有可能的操作状态,长度为2i2^i的区间节点只需要维护2i2^i种不同的操作状态,剩下nin-i位只对上层产生影响。因此每层节点的状态数是2n2^n,总共nn层,时间和空间复杂度是O(n2n)O(n2^n)
节点维护的信息:最大字段和、与左端点相邻的最大字段和、与右端点相邻的最大字段和。跟线段树一样去合并信息就好了。

F. Bags with Balls

题意

nn个盒子,每个盒子中有mm个有标号的小球(不同盒子中相同标号的小球认为是不同的),标号[1,m]\in [1, m]。从每个盒子中随机取出一个小球,令FF标号是奇数的小球个数。求所有取球方案的FkF^k的和。

分析

首先令x,yx,y表示盒子中标号为奇数和偶数的小球个数:x=m+12,y=m2x=\frac{m+1}{2},y = \frac{m}{2}。得到奇数标号的小球数量为cc的方案数f(c)=Cnc×xc×yncf(c) = C_n^c \times x^c \times y^{n-c}ans=i=1nik×Cni×xi×ynians=\sum_{i=1}^{n} i^k \times C_n^i \times x^i \times y^{n-i}
但是n998244352n \leq 998244352,显然是不能通过的。O(Tk)O(Tk)才是能通过的复杂度。

考虑iki^k的意义,等价于将kk个小球放入ii个盒子(不同、可空)的方案数。若枚举考虑非空盒子的数量jjik=j=1iCij×S(k,j)×j!i^k = \sum_{j=1}^{i} C_i^j \times S(k, j) \times j!CijC_i^j表示取jj个盒子的方案,S(i,j)S(i,j)为第二类斯特林数,将kk个小球放入jj个非空盒子(相同)的方案数,j!j!是盒子的排列。

代入到原式子

ans=i=1nik×Cni×xi×yni=i=1nCni×xi×ynij=1iCij×S(k,j)×j!=j=1nS(k,j)×j!i=jnCij×Cni×xi×jni=j=1nS(k,j)×j!i=jnCnj×Cnjij×xi×jni=j=1nS(k,j)×j!×Cnji=jnCnjij×xi×jni=j=1nS(k,j)×j!×Cnj×xj×(x+y)njans = \sum_{i=1}^{n} i^k \times C_n^i \times x^i \times y^{n-i} \\ =\sum_{i=1}^{n} C_n^i \times x^i \times y^{n-i} \sum_{j=1}^{i} C_i^j \times S(k, j) \times j! \\ (改变求和顺序)= \sum_{j=1}^{n} S(k,j) \times j! \sum_{i=j}^{n}C_i^j \times C_n^i \times x^i \times j^{n-i} \\ = \sum_{j=1}^{n} S(k,j) \times j! \sum_{i=j}^{n}C_n^j \times C_{n-j}^{i-j} \times x^i \times j^{n-i} \\ = \sum_{j=1}^{n} S(k,j) \times j! \times C_n^j \sum_{i=j}^{n} C_{n-j}^{i-j} \times x^i \times j^{n-i} \\ (二项式定理)= \sum_{j=1}^{n} S(k,j) \times j! \times C_n^j \times x^j \times (x+ y)^{n-j} \\

斯特林数和组合数可以预处理,复杂度为O(Tk+k2)O(Tk + k^2)


Codeforces Round 812

A,B,C水题

D. Tournament Countdown

题意

交互题,2n2^n个人进行锦标赛制。aia_i表示第ii个人的胜利次数。每次询问i,ji,j,如果ai<aja_i < a_j返回 1,如果ai>aja_i > a_j返回 2,如果ai=aja_i=a_j返回 0。使用不超过132n+1\frac{1}{3}2^{n+1}次询问找到冠军。

分析

如果每44个人使用22个询问,则使用的次数为$2^{n-1} + 2^{n-3} + … =\leq \frac{1}{3}2^{n+1} $。
在相同组的44个人中,aia_i是类似{0,1,0,2}\{0,1, 0, 2\}分布的,两人的小组必有ai=0a_i=0aj!=0a_j!=0
查询1,41,4

  • 返回 0,表示1,41,4ai=0a_i=0,都不是胜者,再在2,32,3当中查
  • 返回 1,表示a10,a4=0a_1 \neq 0, a_4=0,胜者在1,31,3当中
  • 返回 2,表示a1=0,a40a_1=0, a_4 \neq 0,胜者在2,42,4当中

每一组的四个人都是这样的。递归解决,每一层规模÷4\div 4

E. Cross Swapping

题意

对一个n×nn\times n的矩阵进行若干次操作,可将矩阵的第kk行和第kk列交换。最后使得矩阵的字典序最小(从第一行读到第nn行)

分析

从前往后逐个扫描,假设当前是第ii行第jj列的元素a[i][j]a[i][j],和a[j][i]a[j][i]进行比较,如果要使它交换,则iijj只能被选其中一个;如果不交换,则iijj可以被选两个或都不选。
这样就变成了iijj的相对关系,用带权并查集或者扩展域并查集来维护。

F. Lost Array

to be updated
SOS Dp
SOS Dp 逆运算


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!