二分 字首和 聰明的質檢員 洛谷P1314

2022-03-11 13:59:10 字數 1038 閱讀 2145

題意:給出n個產品的重量w和價值v,給定m個區間,每個區間通過乙個包含引數w的式子來計算,使總的值逐漸逼近乙個值s

分析:很明顯w為0時,所有產品都滿足,此時y最大,當w比重量w的最大值還大時,所有產品都不滿足,此時y最小,可以明顯看出單調性,我們可以採用二分的方法來做

二分的話如果每次判斷的話都是乙個乙個區間的求,時間複雜度為o(n*m),我們得用字首和將之優化為o(n)

對於每乙個w,進行字首和的時候,如果對應的重量w比w大,則sum陣列加上當前數,否則則不加。

另外,題目是要讓我們盡可能的靠近標準值,所以二分的時候要另外用乙個數ans來記錄

這裡介紹乙個絕對值函式:llabs()能夠求ll數的絕對值。

#includeusing

namespace

std;

typedef

long

long

ll;const

int mod=1e9+7

;const

int maxn=2e5+7

;const ll inf=1e18+7

;const

double pi=acos(-1

);ll ans=inf,res=inf;

ll n,m,s;

ll sum[maxn],sum_n[maxn],w[maxn],v[maxn],l[maxn],r[maxn];

bool isok(int

x)

for(int i=0;i)

//cout

//couty)return

false

;

else

return

true;}

intmain()

for(int i=0;i)

int left=mn-1,right=mx+2;//

右邊界如果只取到mx,則包含不了所有礦石都不滿足的情況,mn同理

while(left<=right)

cout

return0;

}

二分 字首和 聰明的質檢員

問題 f noip2011提 聰明的質監員 day 2 時間限制 1 sec 記憶體限制 128 mb 53 解決 9 提交 狀態 討論版 題目描述 小t是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n個礦石,從1到n逐一編號,每個礦石都有自己的重量wi以及價值vi。檢驗礦產的流程是 1...

洛谷 P1314 聰明的質檢員

原題 小t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 nn 個礦石,從 11到nn 逐一編號,每個礦石都有自己的重量wi 以及價值vi 檢驗礦產的流程是 1 給m個區間 li ri 2 選出乙個引數 w 3 對於乙個區間 li ri 計算礦石在這個區間上的檢驗值yi 這批礦產的檢驗...

NOIP 2011 聰明的質檢員 二分答案

先解釋一下這個式子 就是說如果區間 li,ri 中 wj w的個數 乘以 所有的wj w的價值的和。那麼我們可以二分w的值,通過y與s的值來調整w,具體來講,只要當下的y大於s,那麼增加mid 增大mid質量 否則減小mid。至於check,我們可以o n 的預處理字首和 and 字首積。總複雜度 ...