2019牛客暑期多校训练营(第一场)

2019牛客暑期多校训练营(第一场)

A.Equivalent Prefixes

solved by RDC 42min -1, assisted by F0_0H

题意 给两个序列,求最长前缀使得笛卡尔树相同。

做法1 二分前缀,建笛卡尔树。

做法2 递归地计算 \([l,r]\) 区间内,最长笛卡尔树相等的前缀。查询两个序列在 \([l,r]\) 区间内,最小值的位置,设分别为 \(p_1,p_2\),若 \(p_1 \neq p_2\),递归到 \([l,max(p1,p2)-1]\),否则递归到 \([l,p_1-1]\) 若在 \([l,p_1-1]\) 上两序列笛卡尔树相同则递归到 \([p_1+1,r]\)


B. Integration

upsolved
做法

  • 欲求\(c_i\),使\(\sum_{i=1}^{n}\frac{c_i}{a_i^2+x^2}=\frac{1}{\prod_{i=1}^{n}(a_i^2+x^2)}\)
  • 通分后分子相等:\(\sum_{i=1}^{n}c_i\prod_{j!=i}(a_j^2+x^2)=1\)
  • \(x^2=-a_i^2\),代入得到\(c_i\prod_{j!=i}(a_j^2-a_i^2)=1\)
  • \(c_i=\frac{1}{\prod_{j!=i}(a_j^2-a_i^2)}\)

C.Euclidean Distance

solved by RDC 245min, assisted by F0_0H

题意 求点到高维平面区域最近距离。

做法

  • 如果点向平面垂足在区域内,那么找到最优解。
  • 否则最优解一定在边界上,即某些维上坐标为 0.
  • 对距离的表达式展开,注意到在 \(a_i\) 最小的 \(k\) 维上坐标为 0 是最优的,那么我们需要放逐掉几个维度呢?
  • 二分 \(k\) 值,寻找最小的 \(k\) 使得,点向平面的垂足在区域内。
  • 更大的 \(k\) 不如当前解优,更小的 \(k\) 表示最优解在边界上。

D. Parity of Tuples

upsolved by 题解
题意 n个m元组\(v_1,v_2,...,v_n\),其中\(v_i=(a_{i,1},a_{i,2},...,a_{i,m})\)对于x,求有多少个元组\(v_i\)满足对于所有j,\(a_{i,j}\ and\ x\)有奇数个1,对\(0≤x<2^k\)都求其答案
做法

  • 构造长度为\(2^k\)的数组\(F\),考虑元组\((a_1,a_2,...,a_m)\)
  • 对于所有子集S,把\(F[\bigoplus_{i\in S}a_i]\)加上\((-1)^{|S|}\)
  • 对F做FWT,\(FWT(F)[x]/2^m\)就是答案

正确性证明 by sdcgvhgj

  • 考虑元组\((a_1,a_2,...,a_m)\)的子集S对\(FWT(F)[x]\)的贡献
  • FWT变换的定义:\(FWT(F)[x]=\sum_{i=0}^{n}(-1)^{|i\bigcap x|}F_i\)
  • 所以贡献为:\((-1)^{|(\bigoplus_{i\in S}a_i)\bigcap x|}*(-1)^{|S|}\)
  • \(=(-1)^{|\bigoplus_{i\in S}a_i\bigcap x|}*(-1)^{|S|}\)\(\bigcap\)\(\bigoplus\)有分配率
  • \(=(-1)^{\sum_{i\in S}|a_i\bigcap x|}*(-1)^{|S|}\),x和y中1的个数和的奇偶性和x⨁y中1的个数的奇偶性是一样的。
  • \(=(-1)^{\sum_{i\in S}1+|a_i\bigcap x|}\)
  • \(=\prod_{i\in S}(-1)^{1+|a_i\bigcap x|}\)
  • 所有S对\(FWT(F)[x]\)的贡献之和\(=\sum_S\prod_{i\in S}(-1)^{1+|a_i\bigcap x|}\)
  • \(=\prod_i(1+(-1)^{1+|a_i\bigcap x|})\)
  • \(|a_i\bigcap x|\)全为奇数则值为\(2^m\),否则为0

E.ABBA

upsolved by RDC

题意 有多少个长度为 \(2(n+m)\) 的AB序列,可以划分成 \(n\)\(AB\) 子序列,\(m\)\(BA\) 子序列。

做法

  • 一个序列能成功划分,等价于可以进行如下的贪心匹配,让前 \(n\)\(A\) 字符,参与 \(AB\) 串,后 \(m\)\(A\) 字符,参与 \(BA\) 串的构造,\(B\) 字符类似。于是只要知道了一个字符的在同类中的 rank 就能知道它该匹配谁。
  • \(dp[x][y]\) 表示长度为 \(x+y\) 的,有 \(x\)\(A\)\(y\)\(B\) 的前缀,不违背以上匹配规则的,方案数。
  • 枚举下一个字符是啥。

code by rdc


F.Random Point in Triangle

solved by sdcgvgj 61min

题意 三角形内随机选点到与三边形成的三角形的最大值的期望。

做法 E = S*22/36


H.XOR

upsolved by RDC

题意\(n\) 个元素,输出异或和为 0 的集合 size 之和。

做法

  • 插入线性基,记录主元所在的行由哪些元素异或而得(至多维数个)。
  • 记录全为 0 的行,由哪些元素异或而得(至多维数个)。
  • 考虑暴力,我们枚举取哪些全是 0 的行。
  • 考虑优化,按位算贡献即可。

夕阳红

  • 比赛时写了个 1<<62。
  • 试图绝杀的时候,不会算 \(\sum_{i=1}^{n} iC_{n}^{i}\)

I.Points Division

upsolved by F0_0H

题意 二维平面上给定n个点,每个点有两个属性\((a[i], b[i])\),要求用一条单调递增的折线把平面分成两部分,最大化(上半部分的\(a[i]\)\(+\) 下半部分的\(b[i]\)和)

题解

  • 首先对数据离散化
  • \(DP[i][j][0]\) 表示考虑前\(i\)行,折线最高点在第\(j\)列下方一丢丢的最大值
  • \(DP[i][j][1]\) 表示考虑前\(i\)行,折线最高点在第\(j\)列上方一丢丢的最大值
  • \(DP[i][j][0] = max(max_{1\leq j\leq i}DP[i-1][j][0], max_{1\leq j \leq i-1}DP[i-1][j][1])+\sum_{j\leq k\leq n}a[i][k]+\sum_{1\leq k\leq j-1}b[i][k]\)
  • \(DP[i][j][1] = max(max_{1\leq j \leq i}DP[i-1][j][0], max_{1\leq j \leq i}DP[i-1][j][1])+\sum_{j+1\leq k\leq n}a[i][k]+\sum_{1\leq k\leq j}b[i][k]\)
  • 线段树维护转移

J.Fraction Comparision

solved by F0_0H 9 min

题意 比较两分数大小

题解 简单签到,随便搞


你可能感兴趣的:(2019牛客暑期多校训练营(第一场))