1. 程式人生 > >[noip2011]聰明的質監員

[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