雜題選放

提示:點擊解題思路即可展開。

UOJ62「UR #5」怎樣跑得更快

題目大意

給定整數 \(n,c,d\) 和個長度爲 \(n\) 的數組 \(b[]\),求另一個數組 \(x[]\),對於 \(P=998244353\),滿足

\[\sum_{j=1}^n\gcd(i,j)^c\times lcm(i,j)^d\times x_j=b_i \pmod P \]

數據範圍

\[1 \le n \le 10^5 \]

解題思路

先說題解給出的解法,首先一步轉化

\[\sum_{j=1}^n\gcd(i,j)^{c-d}\times \frac{x_j}{j^d}=\frac{b_i}{i^d} \pmod P\\ \sum_{j=1}^n\gcd(i,j)^{c-d} X_j=B_i \pmod P\\ \]

第一波直接設 \(f(n)=\sum_{d|n}f_r(d)\) 這樣 \(f_r(n)=f(n)-\sum_{d|n\and d \neq n}f_r(d)\) 是可以 \(\Theta(n\log n)\) 求的。然後推一波式。

\[\sum_{j=1}^nf(\gcd(i,j))X_j=B_i\\ \sum_{j=1}^n\sum_{d|i,d|j}f_r(d)X_j=B_i\\ \sum_{d|i}f_r(d)\sum_{j=kd}X_j=B_i\\ \sum_{d|i}f_r(d)S(d)=B_i\\ \]

可以算得 \(f_r(n)S(n)=B_n-\sum_{d|n\and d \neq n}{f_r(d)S(d)}\)

因爲 \(f_r(n)\) 有可能等於 0,這時候判一下無解或多解,這樣我們就把 \(S(n)\) 全算出來了。

然後考慮解出 \(X_j\),有 \(S(d)=\sum_{i=kd}^{n}X_i\),所以 \(X_d=S(d)-\sum_{i=(k+1)d}^{n}X_i\)

然後就做完啦,容易發現這裏一共用了三次莫比烏斯反演!


CF232C Doe Graphs

題目大意

遞歸的定義一個 \(n\) 階無向圖 \(D(n)\),邊權均爲 1

  • \(D(0)\) 由節點 1 構成
  • \(D(1)\) 由節點 1, 2 和邊 (1, 2) 構成
  • \(D(n)\) 以如下方式構造
    • \(D(n-2)\) 的中的點編號都加上 \(|D(n-1)|\)
    • 在點 \(|D(n-1)|\) 和點 \(|D(n-1)|+1\) 之間連邊。
    • 在點 \(|D(n-1)|+1\) 和點 1 之間連邊

對於 n 階無向圖 \(D(n)\) 多次詢問求出點 \(x, y\) 之間的最短路

img

數據範圍

\[1 \le n, q \le 10^5\\ 1 \le x ,y \le 10^{16} \]

解題思路

情況一:a 在左部圖,b 在右部圖

img

首先觀察發現 \(|D(n-1)|+1\) 事這個圖的割點,也就是說左邊到右邊一定要經過這個點,所以遞歸去做

\[Dis(a,b,n)=\min(Dis(1,a,n-1),Dis(a,|D(n-1)|,n-1))+Dis(1,B-|D(n-1)|,n-2) \]

情況二:a,b 均在右部圖

容易發現 \(Dis(a,b,n)=Dis(a-|D(n-1)|,b-|D(n-1)|,n-2)\)

情況三:a,b 均在左部圖

img

容易發現要麼直接從 a 走到 b,否則有可能到 \(|D(n-1)+1|\) 這個點彙集,有

\[Dis(a,b,n)=\min\left\{ \begin{matrix} Dis(a,b,n-1)\\ Dis(1,a,n-1)+Dis(b,|D(n-1)|,n-1)+2\\ Dis(1,b,n-1)+Dis(a,|D(n-1)|,n-1)+2\\ \end{matrix}\right. \]

這樣就可以遞歸着做了,然而我們還是發現第三種情況分生出的太多,\(\log\) 的時間內事不行的,但考慮到 n 的大小事 \(\log\) 的,另外算的 \(Dis\) 值大多與 \(1,|D(n)|\) 相關。

所以我們預處理出,\(A1[n] = Dis(1,a,n),A2[n]=Dis(a,|D(n)|,n)\),對於 b 類似,這樣就沒有那麼多分支了。

預處理的過程和上面三種情況一致,注意還要處理 \(g[n] = Dis(1,|D(n)|,n)\),遞推式爲 \(g[n] = g[n-2]+1\)


CF1310 Au Pont Rouge

題目大意

給出一個長度爲 \(n\) 的字符串 \(S\) 以及整數 \(m,k\)

對於一個把 \(S\) 分割成非空的 \(m\) 段的一個方案,我們用這個方案中分割出的字典序最小的一個串代表這個分割方案。

eg. \(S=abaabb,m=3\),存在分割方案 \(\{ab,aab,b\}\),則我們用字典序最小的 \(aab\) 來代表這個分割方案。

現在把所有分割方案對應的代表該方案的串按字典序從大到小排序,求排序後的第 \(k\) 個串。

數據範圍

$ 2 \le n \le 1,000,1 \le m \le 1,000, 1 \le k \le 10^{18} $

解題思路

第 k 大肯定能想到二分,我們把它的所有子串按字典序排序,然後二分第 k 個串是什麼,然後 dp \(\Theta(n^2)\) 算出方案數即可。

難點大概在 dp 上,設 \(dp[x][y]\) 表示前 x 個位置,劃分了 y 個字典序大於二分串,且第 x 個位置處一定被劃分的方案數,容易發現這樣事 \(\Theta(n^3)\)的,有沒有複雜度更低的方法呢?

考慮倒着 dp,\(dp[x][y]\) 表示考慮了 \(x\text~n\),恰好劃分了 m 段的方案數,\(fp[x][y]\) 表示考慮了 \(x\text~ n\),已經劃分了 m 段的方案數,設 t 表示 \(s[x\dots t]\) 字典序恰好大於二分串的位置,那麼轉移爲

\[dp[x][y] = d[t][y-1]\\ d[x][y] = dp[x][y]+d[x+1][y] \]

是不是非常簡單 😁


GYM102059 B.Dev, Please Add This!

題目大意

給定一個地圖,由 牆 # 空地 . 起點 O 特殊點 * 構成,從起點開始行走,問是否可以經過所有的特殊點。其中行走的規則如下:

  • 可以向上下左右四個方向走
  • 碰到邊界或者牆就停止,否則不可以停下

樣例

3 7
#..O..#
#.###.#
*..#..*

NO

6 6
*..*##
..O...
*..*#.
####*.
......
.....#

YES

數據範圍

\(1 \le H,W \le 50\)

解題思路

我們把圖建出來,A 到 B 有邊當且僅當能從 A 直接走到 B,然後我們縮點求連通分量。

發現了嗎,有三種限制,考慮你最終走出的路徑中到達的連通分量。

  • 每個特殊點上下肯定在一個連通分量內,左右亦然,這個點被經過當且僅當這兩個連通分量至少有一個被到達。
  • 從出發點到不了的連通分量必不能到達
  • 如果 A 和 B 兩個連通分量沒有祖先關係必不能同時到達。

每個連通分量只有被到達和不被到達兩種情況,這樣就是一個 2-sat 可以解決的問題了。


D. Yui and Mahjong Set

題目大意

img

這是一道交互題。

有一個由 \(n\) 個數構成的集合 \(S\),內部元素可以重複。

保證,內部元素的值 \(a_i\) 都滿足 \(1\le a_i\le n\),且對於一種值 \(k\) 保證 \((\sum_{i\in S} [a_i=k])\le n\),即每種值在集合內不會出現超過 \(n\) 次。

定義一個 \(\mathbf {triplet}\)\(S\) 的一個大小爲 \(3\) 的子集,且這三個元素的值相同。

定義一個 \(\mathbf{straight}\)\(S\) 的一個大小爲 \(3\) 的子集,且這三個元素的值連續,例如 \(\{2,3,4\}\) 是一個 \(\mathbf{straight}\),但是 \(\{1,3,5\}\) 不是一個 \(\mathbf{straight}\)

例如,對於集合 \(\{1,2,2,1,3\}\) 中,其 \(\mathbf{straight}\) 的數量爲 \(4\)

現在你可以進行至多 \(n\) 次查詢操作和 \(1\) 次回答操作:

  • 查詢操作:將一個數 \(x(1\le x\le n)\) 插入集合 \(S\),然後交互器會告訴你插入結束後集合 \(S\) 中的 \(\mathbf{triplet}\)\(\mathbf{straight}\) 的數量。

  • 回答操作:令 \(c_i\) 表示集合 \(S\) 中權值爲 \(c_i\) 的數的個數,則你需要求出對於初始的集合 \(S\),求出 \(c_1,c_2\sim c_n\)

  • 交互器會告訴您 \(n\) 以及初始時集合 \(S\) 中的 \(\mathbf{triplet}\)\(\mathbf{straight}\) 的數量。

執行查詢操作的格式爲 + x,執行回答操作的格式爲 ! c1 c2 c3 ... cn

數據範圍

\(4\le n\le 100\)

解題思路

顯然我們看總量是沒有什麼用的,要看增量。

首先如果一個數出現個數大於等於 2,那麼給它加一通過 \(\mathbf{triplet}\) 的數量可以直接求出它到底出現了幾次,否則它的出現情況就是 0 和 1。

進一步的,確定一個數最多隻用兩次。另外加 1 時的 \(\mathbf{straight}\) 只會和 2,3 有關,根據我們頭腦中的搜索剪枝,最終得到了這樣的一個可行解。1,3,1 的順序能讓我們同時確定 1 和 2,確定 1 用 \(\mathbf{triplet}\) 即可,確定 2 通過兩次詢問 \(\mathbf{straight}\) 得到,即解方程組 \(\left\{\begin{matrix} bc=k_1\\b(c+1)=k_2\end{matrix}\right.\) ,c 當 b 不等於 0 時能夠解出,那麼我們第一開始就把 b 加一就行了,這是我們用四次求出了前三個值,並且保證大於 0。

如果 \(n = 4\),把 \(\mathbf{straight}\) 的方程都列出來,直接解即可。

否則,我們發現通過前幾次詢問,我們能確定 4 是否是 0,這樣我們詢問 4 的時候就可以直接確定了,詢問 4 的時候又可以得知 5 是否是 0,以此類推,直到 \(n-1\) 時,我們直接可以通過解個方程得到 \(c_n\) 了。


UOJ507「JOISC2020」星座3

題目大意

\(JOI-kun\) 拍了一張夜景照片。這張照片由 \(N \times N\) 個像素組成,即長寬均爲 \(N\) 個像素。從左到右第 \(x\) 列,從上往下第 \(y\) 行的像素被稱爲 \((x,y)\)
圖片中的每個像素都代表着建築物、夜空或星星。建築物顏色是白色、夜空顏色是黑色,星星顏色是黃色。對於 \(1 \le i \le N\) 的每個 \(i\),在第 \(i\) 列中,從最下面一行到第 \(A_i\) 行像素是表示建築物的白色像素。其餘的像素中,有 \(M\) 個黃色像素代表着星星。第 \(j\) 個黃色像素 \((1 \le j \le M)\) 是像素 \((X_j,Y_j)\)。所有其他像素都是代表夜空的黑色像素。
我們稱對於原照片的一個子矩形,如果以下兩個條件成立,則被稱作一個星座:

  • 矩形區域中沒有白色像素。
  • 矩形區域中有兩個或多個黃色像素。

$ JOI-kun$ 已經厭倦了看星座。因此他想把一些黃色像素畫成黑色,使得修改後的照片不存在任何星座。
然而,如果他將過多黃色像素塗黑,這幅畫就變得不自然了。更準確地說,如果他把第 \(j\) 個黃色像素 \(1 \le j \le M\) 成黑色,那麼圖片的不自然度就會增加 \(c_j\)。沒有進行塗黑操作前,照片不自然度爲 \(0\)
編寫一個程序,在給定圖片信息和每個黃色像素的整數的情況下,選擇若干個星星塗黑,使得修改後的圖不存在星座,且不自然度最小。

樣例

Input:
5
1 3 4 2 3
3
1 5 3
4 3 2
2 4 2

Output:
2

樣例一示意圖

數據範圍

對於所有測試數據,滿足\(1 \le N,M \le 200000,1 \le A_i \le N,1 \le X_i,Y_i \le N,1 \le C_j \le 10^9\)

解題思路

將星星和高樓的座標都按縱座標從小到大排序,使用並查集維護從一個點向左向右在不穿牆的情況下最遠能到達哪

然後維護一個樹狀數組表示每個位置放置所需的代價(先說做法再解釋爲什麼,因爲太神仙了!

看看當前位置在樹狀數組上的值 \(S\),和這顆星星消除的代價 \(C\) 比較

  • \(S \ge C\) 答案直接加上 \(C\),因爲在上面的點更容易和別的點衝突,而且代價更大,肯定不優,刪掉
  • \(S < C\) 答案暫時加上 \(S\),並將區間 \([L, R]\) (表示能夠到達區域)每個值加上 \(C - S\)

乍一看好像沒什麼道理,甚至隨隨便便就可以 \(Hack\) 一下?

但事實上它是正確的,請想象一下在某個局面時,強制一個點必選所獲得的代價,可以發現位置靠下的星星與之衝突的都會有 \(C_i-S_i\) 的貢獻,因爲之前答案暫時加了 \(S_i\),那麼在加上差就會變爲 \(C_i\),而不衝突的則安然無恙

但我還是不會嚴格證明每一步都會是最優解 QAQ,哪位神仙會可以教教我

以下爲個人 \(\mathbb{YY}\) 部分:

由構造方法可知,在以前的每一步均是最優解且沒有修改過前面的狀態,即保留下來的點刪除不會更優,放入一個點時必將衝突點全部刪除,這時衝突點的衝突點將全部釋放(重新選中),而不會重新選中它們所衝突的更深層點,因爲以前的保留點已經做到比選更深層點優

感謝聆聽
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章