洛谷P1314 聪明的质监员
P1314 聪明的质监员
题目描述
小T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi 。检验矿产的流程是:
1 、给定m 个区间[Li,Ri];
2 、选出一个参数 W;
3 、对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi:

这批矿产的检验结果Y 为各个区间的检验值之和。即:Y1+Y2...+Ym
若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产。小T
不想费时间去检验另一批矿产,所以他想通过调整参数W 的值,让检验结果尽可能的靠近
标准值S,即使得S-Y 的绝对值最小。请你帮忙求出这个最小值。
输入输出格式
输入格式:
输入文件qc.in 。
第一行包含三个整数n,m,S,分别表示矿石的个数、区间的个数和标准值。
接下来的n 行,每行2个整数,中间用空格隔开,第i+1 行表示 i 号矿石的重量 wi 和价值vi。
接下来的m 行,表示区间,每行2 个整数,中间用空格隔开,第i+n+1 行表示区间[Li,Ri]的两个端点Li 和Ri。注意:不同区间可能重合或相互重叠。
输出格式:
输出文件名为qc.out。
输出只有一行,包含一个整数,表示所求的最小值。
输入输出样例
5 3 15
1 5
2 5
3 5
4 5
5 5
1 5
2 4
3 3
10
说明
【输入输出样例说明】
当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≤10^6,0 < S≤10^12,1 ≤Li ≤Ri ≤n 。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#define maxn 200010
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
using namespace std;
int n,m,w[maxn],v[maxn],L[maxn],R[maxn];
long long s;
long long check(int x){
int cnt=;
long long sum=,res=;
for(int i=;i<=m;i++){
sum=;cnt=;
for(int j=L[i];j<=R[i];j++)
if(w[j]>=x){
cnt++;
sum+=v[j];
}
res+=1LL*cnt*sum;
}
return res;
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d"LL,&n,&m,&s);
int l=0x7fffffff,r=;
for(int i=;i<=n;i++){
scanf("%d%d",&w[i],&v[i]);
l=min(l,w[i]);r=max(r,w[i]);
}
for(int i=;i<=m;i++)scanf("%d%d",&L[i],&R[i]);
long long ans=1e12;
while(l<=r){
int mid=(l+r)>>;
long long now=check(mid);
ans=min(ans,abs(now-s));
if(now>s)l=mid+;
else r=mid-;
}
printf(LL,ans);
}
55分 二分答案+暴力check
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#define maxn 200010
#ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
using namespace std;
int n,m,w[maxn],v[maxn],L[maxn],R[maxn];
long long sum[maxn][];
long long s;
long long check(int x){
memset(sum,,sizeof(sum));
for(int i=;i<=n;i++){
if(w[i]>=x){
sum[i][]=sum[i-][]+;
sum[i][]=sum[i-][]+v[i];
}
else{
sum[i][]=sum[i-][];
sum[i][]=sum[i-][];
}
}
long long res=;
for(int i=;i<=m;i++)
res+=(sum[R[i]][]-sum[L[i]-][])*(sum[R[i]][]-sum[L[i]-][]);
return res;
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d%d"LL,&n,&m,&s);
int l=0x7fffffff,r=;
for(int i=;i<=n;i++){
scanf("%d%d",&w[i],&v[i]);
l=min(l,w[i]);r=max(r,w[i]);
}
for(int i=;i<=m;i++)scanf("%d%d",&L[i],&R[i]);
long long ans=1e12;
while(l<=r){
int mid=(l+r)>>;
long long now=check(mid);
ans=min(ans,abs(now-s));
if(now>s)l=mid+;
else r=mid-;
}
printf(LL,ans);
}
100分 二分答案+前缀和
洛谷P1314 聪明的质监员的更多相关文章
- 洛谷P1314 聪明的质监员 题解
		
题目 聪明的质监员 题解 这道题和之前Sabotage G的那道题类似,都是用二分答案求解(这道题还要简单一些,不需要用数学推导二分条件,只需简单判断一下即可). 同时为了降低复杂度,肯定不能用暴力求 ...
 - 洛谷 P1314 聪明的质监员 —— 二分
		
题目:https://www.luogu.org/problemnew/show/P1314 显然就是二分那个标准: 当然不能每个区间从头到尾算答案,所以要先算出每个位置被算了几次: 不知为何自己第一 ...
 - [NOIP2011] 提高组 洛谷P1314 聪明的质监员
		
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: 1 .给定m 个区间[L ...
 - 洛谷 P1314 聪明的质监员【二分+前缀和】
		
真是zz, 题目很显然是二分W,然后判断,我一开始是用线段树维护当前w[i]>W的个数和v(公式就是区间满足要求的个数*满足要求的v的和),然后T成70 后来想到树状数组差分常数或许会小,于是改 ...
 - 洛谷——P1314 聪明的质监员
		
https://www.luogu.org/problem/show?pid=1314 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每 ...
 - 『题解』洛谷P1314 聪明的质监员
		
更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 小T是一名质量监督员,最近负责检验一批矿产的质量.这 ...
 - 洛谷 [P1314] 聪明的质检员(NOIP2011 D2T2)
		
###一道二分答案加前缀和### 题目中已经暗示的很明显了 "尽可能靠近" " 最小值" 本题的主要坑点在于 long long 的使用 ##abs函数不支持l ...
 - P1314 聪明的质监员(前缀和+二分)
		
P1314 聪明的质监员 显然可以二分参数W 统计Y用下前缀和即可. #include<iostream> #include<cstdio> #include<cstri ...
 - luogu P1314 聪明的质监员 x
		
P1314 聪明的质监员(至于为什么选择这个题目,可能是我觉得比较好玩呗) 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自 ...
 
随机推荐
- php 微信公众平台开发之微信群发信息
			
这篇文章主要为大家详细介绍了php微信公众平台开发之微信群发信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片 ...
 - 理解WCF(第二部分,部分參考他人)
			
該篇的主題:wcf到底是怎工作的? 一.什么是分布式: 首先看一张图: 由上图对比我们可以发现,区别就是前者把服务器放在了一台电脑上,而后者把服务器放在了多台电脑上.这样多台电脑处理起来的速度比一台电 ...
 - IpIImage -> CvMat 转换方法
			
Ipl转为CvMat 一般为这两种方法: 1: /*cvGetMat*/ CvMat matheader; CvMat * mat = cvGetMat(img, &matheader); 2 ...
 - mysql 常用的存储引擎MyISAM/InnoDB比较
 - buildroot mysql mysql.mk hacking
			
/*********************************************************************** * buildroot mysql mysql.mk ...
 - FFMPEG(一) 从V4L2捕获摄像头数据
			
系列相关博文: FFMPEG(一) 从V4L2捕获摄像头数据 FFMPEG(二) v4l2 数据格式装换 FFMPEG(三) v4l2 数据编码H264 最近在学习FFMPEG,发现网上的很多例子都是 ...
 - bzoj 2001: City 城市建设  cdq
			
题目 PS国是一个拥有诸多城市的大国,国王Louis为城市的交通建设可谓绞尽脑汁.Louis可以在某些城市之间修建道路,在不同的城市之间修建道路需要不同的花费.Louis希望建造最少的道路使得国内所有 ...
 - 【LeetCode】001. Two Sum
			
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
 - BZOJ1727:[Usaco2006 Open]The Milk Queue挤奶队列
			
我对\(Jhonson\)算法的理解:https://www.cnblogs.com/AKMer/p/9863620.html 题目传送门:https://www.lydsy.com/JudgeOnl ...
 - 使用Rancher搭建K8S测试环境
			
使用Rancher搭建K8S测试环境 http://blog.csdn.net/csdn_duomaomao/article/details/75316926 环境准备(4台主机,Ubuntu16.0 ...