NOIP2011 聪明的质监员
描述
1 、给定m 个区间[Li ,Ri];
2 、选出一个参数 W;
3 、对于一个区间[Li ,Ri],计算矿石在这个区间上的检验值Yi:
Yi=Σ1*Σvj,Σ的循环变量为j,这里j要满足j∈[Li,Ri]且wj≥W,这里j是矿石编号。
这批矿产的检验结果Y为各个区间的检验值之和。ΣYi,Σ的循环变量为i,1≤i≤m。
若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产。小T不想费时间去检验另一批矿产,所以他想通过调整参数W 的值,让检验结果尽可能的靠近标准值S,即使得S-Y 的绝对值最小。请你帮忙求出这个最小值。
输入格式
接下来的m 行,表示区间,每行2 个整数,中间用空格隔开,第i+n+1 行表示区间[Li, Ri]的两个端点 Li 和Ri 。注意:不同区间可能重合或相互重叠。
输出格式
测试样例1
输入
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。
备注
对于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<cstring> #include<string> #include<cmath> #include<algorithm> using namespace std; const int maxn = 220005; struct STONE{long long w;long long v; }; long long n,m,s,l[maxn],r[maxn],sum[maxn],sumv[maxn],all,ans = 98765432112345L; STONE stone[maxn]; void input(){cin>>n>>m>>s;all = 0;for(int i = 1;i <= n;i++){scanf("%lld%lld",&stone[i].w,&stone[i].v);if(all < stone[i].w) all = stone[i].w;}for(int i = 1;i <= m;i++){scanf("%lld%lld",&l[i],&r[i]);} } bool check(long long t){sum[0] = sumv[0] = 0;for(int i = 1;i <= n;i++){if(stone[i].w >= t){sumv[i] = sumv[i-1] + stone[i].v;sum[i] = sum[i-1] + 1;}else{sumv[i] = sumv[i-1];sum[i] = sum[i-1];}}all = 0;for(int i = 1;i <= m;i++){all += (sumv[r[i]] - sumv[l[i]-1]) * (sum[r[i]] - sum[l[i]-1]);}ans = min(abs(all - s),ans);return all < s; } void div(){long long lans = 0,rans = all,mans;while(lans <= rans){mans = (lans + rans) >> 1;if(check(mans)){rans = mans - 1;}else{lans = mans + 1;}}check(mans+1);if(mans > 0)check(mans-1);cout<<ans; } int main(){input();div();return 0; }
View Code
转载于:https://www.cnblogs.com/hyfer/p/5656217.html
NOIP2011 聪明的质监员相关推荐
- NOIP2011聪明的质监员题解
631. [NOIP2011] 聪明的质监员 ★★ 输入文件:qc.in 输出文件:qc.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 小 T 是一名质量 ...
- [NOIP2011]聪明的质监员
题目描述 小T是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从1到 n 逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1.给定m个区间[Li,Ri]: 2 ...
- 聪明的质监员 2011年NOIP全国联赛提高组(二分+前缀和)
聪明的质监员 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小 T 是一名质量监督员, ...
- 【洛古 P1314】[NOIP2011 提高组] 聪明的质监员
题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n n n 个矿石,从 1 1 1 到 n n n 逐一编号,每个矿石都有自己的重量 w i w_i wi 以及价值 v ...
- P1314 聪明的质监员(前缀和+二分)
https://www.luogu.org/problem/P1314 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的 ...
- AcWing 499. 聪明的质监员
解题思路: https://www.acwing.com/solution/content/33961/ 代码如下: #include <iostream> using namespace ...
- [NOIP2011]聪明的质检员
[问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...
- NOIP2011 聪明的质检员 - 前缀和 - 二分
这题需要操作w,使得y与s尽量接近 那么考虑到y可以比s小一点也可以大一点,可以分开考虑,若y < s 则尝试把y弄大一点, 这样就可以二分w,使y越来越接近s,并且实时记录最优解,也不用管最后 ...
- NOIP2011聪明的质检员
题目来源:https://www.luogu.org/problem/show?pid=1314 对w进行二分答案. 处理过程中用前缀和优化. 注意要二分两次,一次是w<s时s-w的最小值,另一 ...
最新文章
- 使用正则表达式抽取新闻/BBS网页发表时间
- CSS3 过渡(Transition)
- 【arduino】在Arduino上运行FreeRTOS操作系统,freeRTOS入门教程helloword
- 离散信号经过FFT处理后,幅度,相位,功率的计算
- java blockingqueue_Java多线程进阶(三一)—— J.U.C之collections框架:BlockingQueue接口...
- 聚类(下) 谱聚类算法
- redis学习与入门~~~
- 助力泵嗡嗡响解决方法_突破不可能,3D打印革命性的制造高效高扭矩的径向活塞泵...
- BP神经网络 MATLAB源程序
- 医院信息管理系统需求分析
- 从游戏商业思维中分析游戏用户行为数据(主要是参考网上的一些感想)
- apktool java_apktool的使用
- My Eighty-second Page - 打家劫舍Ⅱ - By Nicolas
- 不积跬步,无以至千里
- Go 面向接口编程实战
- 录音转文字的app哪个好用?来试试这几个宝藏软件
- 深入分析Kafka架构(三):消费者消费方式、三种分区分配策略、offset维护
- 【Python数据分析之pandas01】两个常用的数据结构
- 【python-02】
- 389-MySQL数据库代码封装