Wikioi 1138 聪明的质检员
2016-11-03 17:31
218 查看
1138 聪明的质监员
2011年NOIP全国联赛提高组
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
题目描述 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
program df;
var i,j,n,m,mid,max,x,y,l,r:longint;
ans,s,t:int64;
a,b,c,d:array[0..1000000] of longint;
e,f:array[0..1000000] of int64;
function get(x:longint):int64;
var w,z1,z2:int64;
begin
fillchar(e,sizeof(e),0);
fillchar(f,sizeof(f),0);
w:=0;
for i:=1 to n do
if a[i]>=x then
begin
e[i]:=e[i-1]+b[i]; //前缀数组(记录1 到 每个矿石 的价值和)(以x为参数)
f[i]:=f[i-1]+1; //作用同上
end
else
begin
e[i]:=e[i-1];
f[i]:=f[i-1];
end;
for i:=1 to m do
begin
4000
z1:=e[d[i]]-e[c[i]-1]; //求c[i] -d[i]的价值和
z2:=f[d[i]]-f[c[i]-1]; //作用同上
w:=w+z1*z2;
end;
get:=w;
end;
begin
readln(n,m,s);
for i:=1 to n do
readln(a[i],b[i]);
for i:=1 to m do
readln(c[i],d[i]);
max:=-maxlongint;
ans:=maxlongint*10000;
for i:=1 to n do
if a[i]>max then max:=a[i];
l:=0;
r:=max+10; //尽量使更大一些
while l<r do
begin
mid:=(l+r) div 2;
t:=get(mid);
if abs(t-s)<ans then ans:=abs(t-s);
if ans=0 then break; //此时检验值等于标准值,已经为最接近,则退出
if s>t then r:=mid //若检验值小于标准值则往前搜(满足条件的越多,检验值越大,越接近)
else l:=mid+1; //若检验值大于标准值则往后搜(满足条件的越少,检验值越小,越接近)
end;
writeln(ans);
end.
相关文章推荐
- CODE[VS] 1138 聪明的质检员 二分+前缀和
- vijos P1740 聪明的质检员
- NOIP 2011 - 提高组 聪明的质检员 二分+前缀和 重庆一中高2018级竞赛班第六次测试 2016.7.31 Problem 2
- VIJOS 1740 聪明的质检员
- NOIP2011提高组 聪明的质检员(二分答案)
- [NOIP 2011] 聪明的质检员:二分,前缀和
- codevs 1138 聪明的质监员
- Noip 提高组 2011 Day2 T2 聪明的质检员 二分法
- NOIP2011 D2 T2 聪明的质检员
- [FT][1]NOIP 2011 聪明的质检员
- 2017.4.24 聪明的质检员 思考记录
- NOIP 2011 Senior 5 - 聪明的质检员
- 洛谷 1314||NOIP 2011 聪明的质检员 二分 解题报告
- 【二分】聪明的质检员
- 聪明的质监员(codevs 1138)题解
- 【NOIP2011提高组】聪明的质检员
- codevs 1138 聪明的质监员
- 【noip2011】聪明的质检员
- noip2011提高组——聪明的质检员
- [题解]聪明的质检员