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

題意 比較兩分數大小

題解 簡單簽到,隨便搞



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM