聰明的監督員

2021-09-29 06:23:03 字數 1484 閱讀 9990

聰明的質監員

描述小t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以及價值vi 。檢驗礦產的流程是:

1 、給定m 個區間[li,ri];

2 、選出乙個引數 w;

3 、對於乙個區間[li,ri],計算礦石在這個區間上的檢驗值yi:

20170621090116_13601

這批礦產的檢驗結果y 為各個區間的檢驗值之和。即:y1+y2…+ym

若這批礦產的檢驗結果與所給標準值s 相差太多,就需要再去檢驗另一批礦產。小t

不想費時間去檢驗另一批礦產,所以他想通過調整引數w 的值,讓檢驗結果盡可能的靠近

標準值s,即使得s-y 的絕對值最小。請你幫忙求出這個最小值。

輸入第一行包含三個整數n,m,s,分別表示礦石的個數、區間的個數和標準值。

接下來的n 行,每行2個整數,中間用空格隔開,第i+1 行表示 i 號礦石的重量 wi 和價值vi。

接下來的m 行,表示區間,每行2 個整數,中間用空格隔開,第i+n+1 行表示區間[li,ri]的兩個端點li 和ri。注意:不同區間可能重合或相互重疊。

輸出輸出只有一行,包含乙個整數,表示所求的最小值。

樣例輸入 [複製]

5 3 15

1 52 5

3 54 5

5 51 5

2 43 3

樣例輸出 [複製]

10這道題是乙個裸的二分。單調性易證。二分w的大小。但要注意,字首和應當在二分的check函式裡寫。只能算對當前mid的sum值。(細節一定要小心!!!!!)

#include

using

namespace std;

#define int long long

inline

intread()

const

int inf=

1e18

;const

int n=

2e5+10;

int n,m,s;

int sum[n]

;struct nodee[n]

;int l1[n]

,r1[n]

;int cnt[n]

;inline

intcheck

(int mid)

}for

(int i=

1;i<=m;i++

)return tmp;

}signed

main()

for(

int i=

1;i<=m;i++

)int l=

0,r=mx+

1,mid;

int ans=inf;

while

(l<=r)

printf

("%lld"

,ans)

;return0;

}

聰明的質監員

noip2011 day2 t2 題目描述 小 t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是 見圖 若這批礦產的檢驗結果與所給標準值s 相差太多,就需要再去檢驗另一批礦產。小t不想費時間去檢驗...

聰明的質監員

本題是乙個比較明顯的二分題,顯然可以看出來這個標準值s是可以二分的,之後如果暴力o nmlog1e6 就是50分。但我們顯然不用暴力,這裡我們可以先預掃一遍陣列,並用字首和存w和v,之後再乙個o m 暴力判斷就可以了。和大於標準時加大l以加大mid,小於時減少r。並一定要注意l和r的初始大小,l為所...

聰明的質監員

字首和 二分答案的一道好題。不難看出這個w和礦石的重量是有關係的。礦石的重量的最大值和最小值可以記錄出來,這樣w便有界。根據題意w所在區間顯然可以單調,所以可以使用二分進行求解。我們二分w,然後去計算以這個w為答案的值與標準值相比較。二分的check函式用字首和維護就可以。通常的做法是開兩個陣列,乙...