ABC366
[Problem A] Election 2
有 \(N\) 個人投票選舉,兩位候選人 Takahashi 與 Aoki 分別獲得 \(T\) 票與 \(A\) 票,請問此時能否確定誰將贏得選舉?
\(0\leq T,A,T+A\leq N\leq 99\),且 \(N\) 為奇數。
設 \(M = \dfrac{N+1}{2}\),則判斷 \(T,A\) 是否有一個大於等於 \(M\) 即可。
[Problem B] Vertical Writing
給定 \(N\) 個字串 \(S_i\),所有字串用 *
補齊到最長長度,你需要將現在形成的字元矩陣順時針旋轉 \(90\degree\),並刪掉旋轉後字元矩陣每一行末尾連續的 *
,請問旋轉結果?
\(N, |S_i|\leq 100\)
直接求出最長長度,然後下標從 \(N\) 到 \(1\) 掃字串判斷這一位填什麼就可以了。
最後用 popback
去一下 *
。
[Problem C] Balls and Bag Query
給定一個袋子,維護 \(Q\) 個操作,分為如下三種:
1 x
,表示往袋子中加入一個編號為 \(x\) 的球。2 x
,表示從袋子中丟掉一個編號為 \(x\) 的球,保證有這麼一個球。3
,表示詢問袋中的球的編號種類數量。
\(Q\leq 2\times 10^5, 1\leq x\leq 10^6\)
經典題,set
維護答案,直接開個變數也可以,map
維護某個球的數量,直接開個桶也可以,畢竟值域不大。
時間複雜度為 \(\mathcal{O}(Q)\) 或 \(\mathcal{O}(Q\log_2 Q)\)。
[Problem D] Cuboid Sum Query
給定一個三維陣列 \(A_{i,j,k}(1\leq i,j,k\leq N)\),給定 \(Q\) 個詢問,每次詢問給出 \((lx,rx,ly,ry,lz,rz)\),求所有滿足 \(lx\leq x\leq rx, ly\leq y\leq ry, lz\leq z\leq rz\) 的 \(A_{x,y,z}\) 的和。
\(N\leq 100, Q\leq 2\times 10^5, A_{i,j,k}\leq 999\)
經典三維字首和 + 三維差分。
Show 一下我的程式碼:
sum[i][j][k]=sum[i-1][j][k]+sum[i][j-1][k]+sum[i][j][k-1]-sum[i-1][j-1][k]-sum[i-1][j][k-1]-sum[i][j-1][k-1]+sum[i-1][j-1][k-1]+a[i][j][k];
int ans=sum[rx][ry][rz]-sum[lx-1][ry][rz]-sum[rx][ly-1][rz]-sum[rx][ry][lz-1]+sum[lx-1][ly-1][rz]+sum[lx-1][ry][lz-1]+sum[rx][ly-1][lz-1]-sum[lx-1][ly-1][lz-1];
Haha,一發過。
[Problem E] Manhattan Multifocal Ellipse
給定平面上 \(n\) 個點 \((x_i,y_i)\),求有多少個點 \((x,y)\) 滿足該點距給定 \(n\) 個點的曼哈頓距離和不超過 \(D\)。
\(n\leq 2\times 10^5, -10^6\leq x_i,y_i\leq 10^6\)
直接列舉當 \(x=i,y=i\) 時在對應座標軸上距 \(n\) 個點的距離,然後開個桶存一下,最後答案就是 \(\sum_{0\leq i\leq D} bx_i \sum_{0\leq j\leq D-i} by_j\),字首和最佳化即可。
時間複雜度為 \(\mathcal{O}(n\log_2 n + V)\)。
[Problem F] Maximum Composition
給定 \(n\) 個一次函式 \(f_i(x) = a_ix + b_i\),求一個長度為 \(k\) 的正整數序列 \(p\),且 \(p\) 中元素兩兩不同,使得 \(f_{p_1}(f_{p_2}(\cdots f_{p_k}(1)\cdots))\) 最大。
\(k\leq n\leq 2\times 10^5, k\leq 10, 1\leq a_i,b_i\leq 50\)
首先不可能按照 \(1\sim n\) 的順序轉移,這樣不能保證兩兩不同。
能否找到一種順序呢?答案是可以,我們用貪心可以證明:
相當於是:
也即:
也就是說你先採用的變換滿足 \((a_j-1)b_i\) 儘量小,排序後 DP 即可。
時間複雜度為 \(\mathcal{O}(n\log_2 n + nk)\)。
[Problem G] XOR Neighbors
給定一張無重邊無自環的 \(n\) 個點 \(m\) 條邊無向圖,求是否存在一組點權 \(x_i\),滿足對每一個點都有:該點的所有鄰居(不含自己)的點權的異或為 \(0\)。
\(n\leq 60\),你的構造需要滿足 \(1\leq x_i < 2^{60}\)。
如果不要求 \(x_i > 0\) 則可以用 \(0/1\) 解來構造合法答案,問題是不能取 \(0\)。
但是我們發現,最多 \(60\) 個元,但是我們可以有 \(60\) 組方程組,首先按位考慮,我們可以對每一位都欽定某一個元,該元在該位上的值強制為 \(1\),然後解方程組。
處理很簡單,把與這個點 \(u\) 相鄰的點 \(v\) 的方程組中,這個點 \(u\) 的係數改為 \(0\),然後要求答案為 \(1\)。
這個可以用高斯消元求出,如果某一次求出方程組無解則必定無解,否則因為每一個元都被欽定某個位為 \(1\),此時顯然滿足點許可權制。
時間複雜度為 \(n\) 輪高斯消元,時間複雜度為 \(\mathcal{O}(n^3 + \frac{n^4}{\omega})\),前面的搞出方程組,後面是求解,然後你還會發現 \(\omega > n\)。