既然\(a\)與\(c\)的順序不影響那先把a和c按從大到小排序
設\(a\)組中前\(k\)大為\(a\),\(a\)組中後\(n-k\)為\(b\)
乙個很顯然的思路是列舉\(a\)中最低分是幾
但是發現不好做 所以轉為列舉\(a\)中最低分最少是幾的方案數
假定現在要求\(solve(l,r)\) 表示\(a\)組中的數大於等於\(l\),\(b\)組中的數小於等於\(r\)的方案數
那麼\(a\)組中最低分是\(x\)的方案數顯然可以是\(solve(x,x)-solve(x+1,x)\)
那考慮如何去求\(solve(x,x)\)
首先預處理出來兩個陣列\(y,z\)
\(y_i\)表示對於\(c_i\)這個數 有多少個a中的數滿足\(a_j + c_i >= l\)
類似的\(z_i\)表示對於\(c_i\)這個數 有多少個b中的數滿足\(a_j + c_i <= r\)
既然a,c已經排序過了
那麼乙個很顯然的事情是,\(y_i\)隨著\(i\)的增加單調下降
\(z_i\)隨著\(i\)的增加單調上公升
另乙個很好的性質是, \(y\)和\(z\)雖然會變化, 但是小的永遠只包含在大的裡面
這時候考慮統計方案的方法, 顯然正著做 每次選擇可能會占用後面選擇就很難做
所以考慮倒著統計方案,發現這樣每次選擇一定會占用前面的乙個選擇,就很可做了
最後通過這個可以列出乙個dp,\(dp(i,j)\)表示共分配好了\(i\)個\(c\),其中有\(j\)個給了a組
\(dp[i][j] = dp[i-1][j-1] * (y[i]-(k-j)) + dp[i-1][j] * (z[i]-(i-j-1))\)
dp轉移的意思就是考慮第\(i\)個\(c\)和哪組配對
如果和\(a\)組配對,因為它是第\(j\)個選的,所以按照倒著做的思想 後面已經占用了\(k-j\)個位置 當前位置有\(y[i]-(k-j))\)個\(a\)可以配對
如果和\(b\)組配對,因為\(z\)是單調上公升的,所以應該正著做, 此時前面已經占用了(i-j-1)個位置,當前位置有\(z[i]-(i-j-1)\)個\(a\)可以配對
dp之後返回\(dp_\)就是要求的方案數了
考慮預處理出來\(l[p][k][i]\)表示\(i\)~\(i+2^k-1\)位置跳\(p\)步的最左能到**
類似的\(r[p][k][i]\)表示\(i\)~\(i+2^k-1\)位置跳\(p\)步最右能到**
首先\(l[0][0][i]\)和\(r[0][0][i]\)是顯然的
然後通過類似st表可以得到\(l[0][k][i]\)和\(r[0][k][i]\)
然後倍增的去求出\(l[p][k][i]\)和\(r[p][k][i]\)
最後二分統計答案
考慮如何計算乙個答案\(w\)是否合法
首先對於每個\(i\)求出其\(w\)步能跳到的左右端點\(tl[i],tr[i]\)
這個可以用二進位制拆分和st表實現
然後考慮乙個點對\((x,y)\)合法的條件\(d(x,y) > w\) 且 \(d(y,x) > w\)
那麼這時\(w\)就是可行解
上面條件可以類似的轉化為
\(l(x) > y\)且\(r(y) < x\)
\(l(y) > x\) 且\(r(x) < y\)
這兩者之一滿足條件則點對合法
對於\(j < tl[i]\),我們要統計他們中的\(tr\)的最小值
對於\(j > tr[i]\) , 我們要統計他們中的\(tl\)的最大值
所以對\(tr\),\(tl\)分別做乙個字首最小值和字尾最大值就好了
計算幾何
維護乙個vec表示此時有效的點,按極角序排序, 邊就是相鄰兩個點
其中記錄乙個op表示它和前面的點的連線是直線還是弧線
每次加入一條邊 先統計其與圓的兩個交點
然後挨個去掃vec中的每個點,判斷直線是否與該線有交,如果有交則記錄下來
然後看該直線和此時有效的線的交點是否小於2,如果小於2顯然不會切掉任何東西,直接繼續就可以
如果等於2,表示切掉了乙個區域
用剛剛記錄的兩個交點, 把兩個交點中間的點都清掉,然後把這兩個點加入
op根據實際情況判斷 然後加入就可以
加入完再重新sort一遍 得到新的vec
最後統計答案只要按照op,把每個線的長度加到對應的ans上就可以
考試 省選38
我t2被卡常。笑。t1 這個題和那個zjoi線段樹挺像的。利用期望的線性性,dp出每一對點成為逆序對的概率。然後加起來就是答案了。這樣直接dp是 o n 4k 的。做兩個字首和就可以做到 o n 2k 了。t2打個錶能發現決策如果在 i 可行,那麼在 i 1 也可行。證明的話考慮 選 i 個的話,選...
省選模擬38
這個題考場上打的有點噁心,導致調的時間有點長最後沒優化出來,常數還掛了,被卡成暴力分。考慮dp,令 f i j k 表示第 i 次操作小的點在j大的點在k,最終形成逆序對的方案數。暴力列舉當前選擇的區間的話複雜度是 n 4k 的,仔細看可以發現轉移到的狀態是 o n 的,所以對於每種狀態轉移就是 n...
省選測試21
設 f i 為上一次參加的比賽是第 i 場的最大愉悅值 則 f i max f i f j frac a i j 對於隨機的資料,把列舉的範圍卡到 3000 即可 容易發現,如果沒有 a j leq a i 的限制,那麼就是乙個裸的斜率優化 dp 把 f i frac frac 看做 y 把 i 看...