[noip2011]聰明的質監員
題目描述 Description
小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是:見圖
若這批礦產的檢驗結果與所給標準值S 相差太多,就需要再去檢驗另一批礦產。小T不想費時間去檢驗另一批礦產,所以他想通過調整引數W 的值,讓檢驗結果儘可能的靠近標準值S,即使得S-Y 的絕對值最小。請你幫忙求出這個最小值。
輸入描述 Input Description
第一行包含三個整數 n,m,S,分別表示礦石的個數、區間的個數和標準值。
接下來的 n 行,每行2 個整數,中間用空格隔開,第i+1 行表示i 號礦石的重量wi 和價值vi 。
接下來的 m 行,表示區間,每行2 個整數,中間用空格隔開,第i+n+1 行表示區間[Li,Ri]的兩個端點Li 和Ri。注意:不同區間可能重合或相互重疊。
輸出描述 Output Description
輸出只有一行,包含一個整數,表示所求的最小值。
樣例輸入 Sample Input
5 3 15
1 5
2 5
3 5
4 5
5 5
1 5
2 4
3 3
樣例輸出 Sample Output
10
資料範圍及提示 Data Size & Hint
當 W 選4 的時候,三個區間上檢驗值分別為20、5、0,這批礦產的檢驗結果為25,此時與標準值S 相差最小為10。
資料範圍:
對於 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,0 < wi, vi≤106,0 < S≤1012,1≤Li≤Ri≤n。
//比較水的二分
//判斷時字首和處理一下,nlogn就能過
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
const int maxn = 200000 + 100;
int n,m;
ll S;
int L[maxn],R[maxn],val[maxn],w[maxn];
int sum[maxn],dis[maxn];
ll ans;
int read() {
int x = 0, t = 1;
char ch = getchar();
while(ch < '0' || ch >'9'){
if(ch == '-') t = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
x = x * 10 + ch - '0';
ch = getchar();
}
return x * t;
}
bool pd(int mid) {
memset(sum,0,sizeof(sum));
memset(dis,0,sizeof(dis));
ll now = 0;
for(int i = 1; i <= n; i++) {
if(w[i] >= mid) sum[i] = sum[i-1] + val[i],dis[i] = dis[i-1] + 1;
else sum[i] = sum[i-1],dis[i] = dis[i-1];
}
for(int i = 1; i <= m; i++) {
int p = sum[R[i]] - sum[L[i]];
int q = dis[R[i]] - dis[L[i]];
now += (ll)p * q;
}
ll p = abs(now - S);
ans = min(ans,p);
return now - S > 0;
}
int main() {
n = read(), m = read();
cin>>S;
ans = S;
for(int i = 1; i <= n; i++) w[i] = read(), val[i] = read();
for(int i = 1; i <= m; i++) L[i] = read() - 1, R[i] = read();
int l = 0, r = 1e6;
while(l <= r) {
int mid = (l + r) >> 1;
if(pd(mid)) l = mid + 1;
else r = mid - 1;
}
cout<<ans;
return 0;
}
相關推薦
二分查找前綴和(洛谷1314聰明的質監員NOIP2011提高組)
ron min 最小值 一個數 -s 判斷 inf bre sync 小T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以及價值vi 。檢驗礦產的流程是: 1 、給定m 個區間[Li,Ri
NOIP2011聰明的質監員題解
輸入輸出 std under pri efault abs iostream using nbsp 631. [NOIP2011] 聰明的質監員 ★★ 輸入文件:qc.in 輸出文件:qc.out 簡單對比時間限制:1 s 內存限制:128 MB 【問題描述
luoguP1314 聰明的質監員 題解(NOIP2011)
() main include ostream bsp algo namespace lin etc P1314 聰明的質監員 題目 #include<iostream> #include<cstdlib> #include<cstdio&g
NOIP2011聰明的質監員
檢驗 dig mem 代碼 for bsp ase mes 又是 小T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 nn 個礦石,從 11到nn逐一編號,每個礦石都有自己的重量 w_iwi? 以及價值v_ivi? 。檢驗礦產的流程是: 1 、給定mm個區間
全國資訊學奧林匹克聯賽(NOIP2011)複賽 提高組 day2 T2 聰明的質監員
講過二分已經一段時間,現在老師又找一道二分題來練手#A#,起初就是對兩個大大的西格瑪有點興趣,做起來發現這題出題人還是很心機的啊啊! 現在來一波題目: 2.聰明的質監員 (qc.cpp/c/pas) 【問題描述】 小 T 是一名質量監督員,最近
[NOIP2011真題]聰明的質監員
題目背景 NOIP2011 DAY2 試題 2 。 題目描述 小T是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1 到 n 逐一編號,每個礦石都有自己的重量 wi 以
[noip2011]聰明的質監員
題目描述 Description 小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是:見圖 若這批礦產的檢驗結果與所給標準值S 相差太多,就需要再去檢驗
NOIP2011 Day2 T2 聰明的質監員
W越大,Y越小,所以可以二分W使Y接近S。 少用min、abs可以讓思路更清晰。 #include<cstdio> #include<cstring> #include&
離散+二分+字首和 [NOIP2011] 聰明的質監員
[NOIP2011] 聰明的質監員 時間限制:1 s 記憶體限制:128 MB 【問題描述】 小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n個礦石,從 1 到n逐一編號,每個礦石都有自己的重量wi以及價值vi。檢驗礦產的流程是: 1.
Code[vs] 1138— NOIP2011 聰明的質監員 (二分答案+字首和)
題目連結 題意: 有n個礦石,每個礦石有重量和價值兩個引數,質檢員可以調節一個最低重量w,每個區間的檢查值為該區間內重量>=w的礦石價值和 *(重量>=w的個數),求m個區間的檢查值之和 與 標準值s之差的絕對值的最小值 題解: 檢查值之和 只和 w 有
[NOIP2011]聰明的質監員 D2 T2 二分答案
Time Limit: 1 Sec Memory Limit: 128 MB Description 小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。
noip2011 day2-2 聰明的質監員
題目描述 小 T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1 到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是: 1、給定m 個區間[Li
洛谷 P1314 [NOIP2011 D2T2] 聰明的質監員
題目描述 小T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以及價值vi 。檢驗礦產的流程是: 1 、給定m 個區間[Li,Ri]; 2 、選出一個引數 W; 3 、對於一個區間[Li
noip2011 聰明的質監員 (二分+字首和處理+讀入優化)
第一行包含三個整數n,m,S,分別表示礦石的個數、區間的個數和標準值。 接下來的n行,每行2個整數,中間用空格隔開,第i+1行表示i號礦石的重量wi和價值vi 。 接下來的m行,表示區間,每行2個整數,中間用空格隔開,第i+n+1行表示區間[Li,Ri]的兩個端點Li和Ri。注意:不同區間可能重合或相互重疊
[NOIP2011] 聰明的質監員 二分+字首和
考試的時候打的二分但沒有用字首和維護。但是有個小細節手誤打錯了結果掛掉了。 絕對值的話可能會想到三分,但是注意到w增大的時候y是減小的,所以單調性很明顯,用二分就可以。但注意一個問題,就是二分最後的結果不一定是最優的,只是在它屬於的符號裡是最優的,所以需要最後存正負的最優解
二分查詢字首和(洛谷1314聰明的質監員NOIP2011提高組)
小T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以及價值vi 。檢驗礦產的流程是: 1 、給定m 個區間[Li,Ri]; 2 、選出一個引數 W; 3 、對於一個區間[Li,Ri],計算礦石在這
P1314 聰明的質監員
fin sin 數據 color 空格 tmp ... 個數 pac P1314 聰明的質監員 題目描述 小T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以
luogu P1314 聰明的質監員 x
sca 簡單 最小 最小值 第一個 其中 d+ 計算 long P1314 聰明的質監員(至於為什麽選擇這個題目,可能是我覺得比較好玩唄) 題目描述 小T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的
luogu P1314 聰明的質監員
相互 name 二分 upload names 格式 註意 ++ 負責 題目描述 小T 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以及價值vi 。檢驗礦產的流程是: 1 、給定m 個區間[
[Codevs] 1138 聰明的質監員
wrapper 時間 output check 1年 n+1 app cti scan 1138 聰明的質監員 2011年NOIP全國聯賽提高組 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 黃金 Gold