HZOI2019 砍樹 整除分塊

2022-04-14 07:11:01 字數 1006 閱讀 5680

這題。。。

一開始想的二分,但此題不具備決策單調性,所以是錯的

看了題解之後並不知道它在考什麼

看一眼官方提解:

問題等價於求乙個最大的d,滿足$\sum_\limits^(\lceil\frac\rceil*d-a_i)<=k$

$\sum_\limits^\lceil\frac\rceil*d<=c$

到這裡思路還是非常清晰的,但後面稍微玄學。

我們注意到對於每乙個ai,$\lceil\frac\rceil$只有$a_^$種不同的取值,因此$\sum_\limits^\lceil\frac\rceil$只有n*$a_^$種不同的取值,在它的值確定之後,只需要簡單的除法就可以求出d的最大值。因此把所有的不同的d的取值預處理出來排序,然後暴力計算,檢驗求出的d是否在這個取值所要求的d的範圍內,並更新答案即可。

如何求d最大值?

對於上面的式子,我們把d除過去,可得:

$\sum_\limits^\lceil\frac\rceil<=\lfloor\frac\rfloor$

其中$\lceil\frac\rceil$和$\lfloor\frac\rfloor$都是單調不上公升的。具體來說都是分段的,那麼對於$\lfloor\frac\rfloor$的同一段上,段尾的d值一定優於段首值。

那麼列舉每乙個段尾的d值,暴力求$\lceil\frac\rceil$,更新答案即可。

這樣便可以知道當前d的最大可行取值。

#include#include#include#include#define maxn 105

#define ll long long

using namespace std;

ll n,k,a[maxn],sum=0,d=0,ans=0;

int main()

sum+=k;

while(1)

if(res<=sum) ans=d;

} printf("%lld\n",ans);

return 0;

}

HZOI 2016 公路修建

輸入檔案 hzoi road.in輸出檔案 hzoi road.out簡單對比 時間限制 1 s 記憶體限制 128 mb oi island是乙個非常漂亮的島嶼,自開發以來,到這兒來旅遊的人很多。然而,由於該島嶼剛剛開發不久,所以那裡的交通情況還是很糟糕。所以,oier association組織...

HZOI20190902模擬35題解

題面 a 公園 dag上想拓撲dp 然而博主記憶化搜尋了一下 設f i j 表示從i節點走j個點出公園所用的最小時間 則 f u i min f v j 1 dis 然後記憶化搜尋 include include include include include define int long lon...

HZOI20190828模擬32題解

題面 chinese 考慮 sum limits i f i 的意義 所有方案中煉字的個數之和。統計答案時可以考慮 1,k 每個字對答案的貢獻,即每個字在多少種方案中成為煉字。在方格的乙個確定位置 x,y 字元i對答案的貢獻 x,y 位置的數是i且i是煉字的方案數 是 i 1 i 1 k 由於詩作中...