問題 f: 【noip2011提】聰明的質監員(day 2)
時間限制:
1 sec
記憶體限制: 128 mb
53 解決: 9
[提交] [狀態] [討論版]
題目描述
小t是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n個礦石,從1到n逐一編號,每個礦石都有自己的重量wi以及價值vi。檢驗礦產的流程是:
1. 給定m個區間[li, ri];
2. 選出乙個引數w;
3. 對於乙個區間[li, ri],計算礦石在這個區間上的檢驗值yi:
這批礦產的檢驗結果y為各個區間的檢驗值之和。即:
若這批礦產的檢驗結果與所給標準值s相差太多,就需要再去檢驗另一批礦產。小t不想費時間去檢驗另一批礦產,所以他想通過調整引數w的值,讓檢驗結果盡可能的靠近標準值s,即使得s-y的絕對值最小。請你幫忙求出這個最小值。
每組輸入資料的第一行包含三個整數n,m,s,分別表示礦石的個數、區間的個數和標準值。
接下來的n行,每行2個整數,中間用空格隔開,第i+1行表示i號礦石的重量w
i 和價值v
i 。
接下來的m行,表示區間,每行2個整數,中間用空格隔開,第i+n+1行表示區間[l
i , r
i ]的兩個端點l
i 和r
i 。注意:不同區間可能重合或相互重疊。
資料規模:
對於10%的資料,有1≤n,m≤10;
對於30%的資料,有1≤n,m≤500;
對於50%的資料,有1≤n,m≤5,000;
對於70%的資料,有1≤n,m≤10,000;
對於100%的資料,有1≤n,m≤200,000,06
,012
,1≤l
i ≤r
i ≤n。
輸出 每組輸出只有一行,包含乙個整數,表示所求的最小值。
下面是對樣例資料的解釋:
當w選4的時候,三個區間上檢驗值分別為20、5、0,這批礦產的檢驗結果為25,此時與標準值s相差最小為10。
樣例輸入 copy
5 3 15樣例輸出 copy 101 52 5
3 54 5
5 51 5
2 43 3
## **:
#include
using
namespace std;
vector
int,
int>
>a;
vector
int,
int>
>q;
int n,m;
unsigned
long
long s;
int sum_num[
2000009
],sum_v[
20000009];
unsigned
long
long
check
(long
long x)
for(
int i=
1;i<=m;i++
)return sum;
}unsigned
long
long
aabs
(unsigned
long
long q,
unsigned
long
long p)
intmain()
for(
int i=
1;i<=m;i++
)long
long l=
0,r=
1<<20;
// int ans=s;
while
(lunsigned
long
long x1=
aabs
(s,check
(l))
,x2=
aabs
(s,check
(l+1))
;if(x1>x2)
cout<
else cout<
return0;
}
首先其實主要思路很簡單,二分所需要的w的值,然後二分模板找對,就可以了。
但是既然是提高+的難度怎麼可能只是二分這麼簡單。
這道題坑了我大概乙個下午:
要點有這些:
考慮一下時間複雜度,因為m很大而且區間重複,所以如果在check的時候每個區間都去算一遍的話很容易超時。所以要考慮優化。那麼既然m這麼大,我們就要考慮在o(n)的時間度中完成計算,基本上就是把這個區間掃一遍就得出答案的那種。這種就可以考慮一下單調佇列或字首差分(這裡用字首)。在掃過每乙個點的編號的時候記錄這個點的字首個數和價值量。最後計算的時候,列舉每個區間,用end-(start-1)來計算這個區間中的點數和價值量。
~~三年oi一場空,不開long long見祖宗現場~~其實仔細看看s的值很大的。所以盡量用long long。
以及讓我得95分一直ac不了的地方在做sum的累積時沒有強行轉化long long
二分 字首和 聰明的質檢員 洛谷P1314
題意 給出n個產品的重量w和價值v,給定m個區間,每個區間通過乙個包含引數w的式子來計算,使總的值逐漸逼近乙個值s 分析 很明顯w為0時,所有產品都滿足,此時y最大,當w比重量w的最大值還大時,所有產品都不滿足,此時y最小,可以明顯看出單調性,我們可以採用二分的方法來做 二分的話如果每次判斷的話都是...
聰明的質檢員
問題描述 小 t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1 到 n 逐一編號,每個礦石都有自己的重量wi 以及價值vi 檢驗礦產的流程是 1.給定 m個區間 l i,ri 2.選出乙個引數 w 3.對於乙個區間 l i,ri 計算礦石在這個區間上的檢驗值yi y...
聰明的質檢員
題目描述 小t是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n個礦石,從1到n逐一編號,每個礦石都有自己的重量wi以及價值vi。檢驗礦產的流程見圖。若這批礦產的檢驗結果與所給標準值s相差太多,就需要再去檢驗另一批礦產。小t不想費時間去檢驗另一批礦產,所以他想通過調整引數w的值,讓檢驗結果...