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\) 的前缀,不违背以上匹配规则的,方案数。
- 枚举下一个字符是啥。
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
题意 比较两分数大小
题解 简单签到,随便搞