暑假模擬賽(尤其是後半段題目難度上升)改題效率很低很低,隧導致咕了很多題沒改,現在準備把暑假模擬賽的題只要是賽時沒 AC 的再重新做一做寫寫題解,所以開啟這個“九月補題計劃”,簡稱“9B 計劃”。
(共 27 場模擬賽)
目前進度:1 / 27。
CSP 提高 1
9.10
A.start
200 行的大模擬,沒什麼看頭,程式碼就不重打一遍了。
B.mine
簡單 dp?!但還是調了近 1 個小時。
定義 \(f_{i,0/1/2}\) 表示第 \(i\) 個格子要求後面有 0 個雷、有 1 個雷、當前格子是雷。進行狀態轉移即可。
C.小凱的疑惑
原題 NOIP2017
推點東西(
-
結論 1:若 \(x,y\) 不互質,那麼不能用 \(ax+by\) 表示的一定有無限個。
證明:反證法好證!\(x,y\) 不互質的時候,設 \(gcd(x,y) = g\),可知 \(ax+by=kg,k \in \mathbb{N^+}\) ,所以能用 \(ax+by\) 表示的一定是 \(g\) 的倍數,那麼不是 \(g\) 的倍數的話便不能用 \(ax+by\) 表示。
-
結論 2:保證 \(x,y\) 互質時,不能用 \(ax+by\) 表示的最大的數是 \(xy-x-y\),不能用其表示的個數有 $\frac{(x-1) (y-1)}{2} $。
證明不會,咕!背結論就行。
updated on 9.11
會了已經!知乎證的很詳細,在機房載入不出圖片的話爬一爬就好了。
寫一下結論 2 的證明:
設 \(S=\) {\(s|s\not=ax+by\) },保證 \(a\ge0,b\ge0,gcd(x,y)=1\)
設 \(p,q\in [0, y-1]\),可證 \((px\%y)\) 構成 \(y\) 的完系,即若 \(p\not= q\),有 \((qx\%y)\not= (qx\%y)\)。
證明:反證法。假設 \((px\%y)=(qx\%y)\),那麼設 \(px = k_1 y + u, qx = k_2y+u\),可得 \(k_1-k_2=(q-p) \frac{x}{y}\),由於 \(x,y\) 互質,那麼 \(\frac{x}{y}\) 不為整數,且 \(q-p\) 一定不為 \(y\) 的倍數,那麼上述柿子右邊一定不是整數,但左邊卻是整數,矛盾,假設不成立。
那麼設 \(m,n\in [0, y-1]\),\(n\) 為整數的情況下,\(z=mx+ny\) 可以表示出任意整數。
可知在 \(n < 0\) 且 \(z \ge 0\) 的情況下滿足 \(z\in S\)。
我們先求 \(z=mx+ny, n<0\) 的最大值,因為根據 \(m,n\) 的取值範圍,可求得 \(z\) 最大為 \((y-1)\times x+(-1)\times y=xy-x-y\),最大的不能用 \(ax+by\) 表示的數為 \(xy-x-y\) 得證。
我們設這個最大值為 \(G\),\(S\) 集合的個數為 \(c\),區間 \([0, G]\) 中不屬於 \(S\) 的個數為 \(d\)。
已經知道,\([0,G]\) 中的每個整數都可以表示為 \(mx+ny\ (m\in [0,y-1])\)。
- 對於 \(S\) 中的每個元素 \(mx+ny\) 都有:\(G-(mx+ny) = (y-1-m)x+(-n-1)y\) 屬於 \([0,G]\) 區間且不是 \(S\) 的元素。
那麼顯然有 \(c=d\),所以 \([0,G]\) 中屬於 \(S\) 集合的數有 \(\frac {(G+1)}2 = \frac{(x-1) (y-1)} 2\) 個,即為所求。
D.春節十二響
啟發式合併,不難。
-
從 \(x\) 的每個子樹各取一個點構成一個段,一定合法。
-
在合法的條件下,最大點與次大點存進一個段,一定最優。
對於每個點維護一個優先佇列存以該點為根的子樹中的所有段,每個段只維護其大小即包含的子程式所需記憶體的最大值即可。從下向上遞迴合併,把所有子樹的佇列都合併到其父親節點的佇列上。
考慮如何合併:每次從 \(x\) 的所有子樹的佇列中取最大值構成 \(x\) 的一個新段,那麼這個新段的大小就是這些最大值中的最大值,存進 \(x\) 的佇列中。最後把多出來的單獨成段 和 \(x\) 自己單獨成段 都存進去,便構成了 \(x\) 的佇列。