P1314 [NOIP2011 提高组] 聪明的质监员

news/2024/12/25 14:16:55/文章来源:https://www.cnblogs.com/Xuxuan18/p/18553999

题目

[NOIP2011 提高组] 聪明的质监员

题目描述

小T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有 n 个矿石,从 1 到 n 逐一编号,每个矿石都有自己的重量 wi 以及价值 vi 。检验矿产的流程是:

  1. 给定m 个区间 [li,ri];
  2. 选出一个参数 W;
  3. 对于一个区间 [li,ri],计算矿石在这个区间上的检验值 yi:

其中 j 为矿石编号。

这批矿产的检验结果 y 为各个区间的检验值之和。即:

若这批矿产的检验结果与所给标准值 s 相差太多,就需要再去检验另一批矿产。小T 不想费时间去检验另一批矿产,所以他想通过调整参数 W 的值,让检验结果尽可能的靠近标准值 s,即使得 |s-y|最小。请你帮忙求出这个最小值。

输入格式

第一行包含三个整数 n,m,s,分别表示矿石的个数、区间的个数和标准值。

接下来的 n 行,每行两个整数,中间用空格隔开,第 i+1 行表示 i 号矿石的重量 wi 和价值 vi。

接下来的 m 行,表示区间,每行两个整数,中间用空格隔开,第 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 

输出 #1

10

题解

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cmath>const int N = 2e5 + 10;
long long n, m, goal;  
int w[N], v[N], l[N], r[N];  // w 为矿石的重量,v 为矿石的价值,l 和 r 为区间的起始和结束位置
long long a[N], s[N];  // a 是存储前缀和的数组,s 是存储前缀和的矿石价值数组using namespace std;// 检查给定 W 值时的检验结果
long long check(int mid);int main() {cin >> n >> m >> goal;// 输入矿石的重量和价值for(long long i = 1; i <= n; i++) {cin >> w[i] >> v[i];}// 输入区间的起始和结束位置for(long long i = 0; i < m; i++) {cin >> l[i] >> r[i];}// 二分查找的右边界是 w 的最大值 + 1long long l = 0, r = 1e6 + 1;while(l < r) {long long mid = l + r + 1 >> 1;if(check(mid) >= goal) {l = mid;  // 说明当前 W 值可以满足条件,继续尝试更大的 W} else {r = mid - 1;  // 如果不能满足目标值,尝试更小的 W}}// 输出最接近目标的结果,检查 l 和 r 对应的检验值差值cout << min(abs(check(r) - goal), abs(check(r + 1) - goal)) << endl;
}// 计算给定 W 值时的检验值
long long check(int mid) {long long y = 0;// 更新前缀和数组for(long long i = 1; i <= n; i++) {if(w[i] >= mid) {a[i] = a[i - 1] + 1;  // 矿石重量大于等于 W,数量 +1s[i] = s[i - 1] + v[i];  // 矿石价值加上} else {a[i] = a[i - 1];s[i] = s[i - 1];}}// 计算所有区间的检验值for(long long i = 0; i < m; i++) {// 根据前缀和计算每个区间的检验值long long count = a[r[i]] - a[l[i] - 1];  // 区间内满足条件的矿石数量long long value_sum = s[r[i]] - s[l[i] - 1];  // 区间内满足条件的矿石的价值和y += count * value_sum;  // 计算检验值并累加}return y;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836452.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源 - Ideal库 - 枚举扩展设计思路及实现难点(三)

分享枚举扩展设计思路,包括枚举值、名、描述、项、类型转换。实现难点包括枚举名称、描述转枚举处理,枚举值类型支持,高效返回键值对,识别有效位标志组合等。今天想和大家分享关于枚举扩展设计思路和在实现过程中遇到的难点。01、设计思路 设计思路说起来其实也很简单,就是…

安装新版pycharm 专业版 百分百成功

安装新版pycharm 专业版 百分百成功 创建时间:20241103 1. 下载插件 1.1 打开下面的网站 https://3.jetbra.in/1.2 选择能进去的网站 没使用鸡哥上网使用鸡哥上网1.3 进入的界面1.4 下载插件 查看这里支持的版本号2. 在官网下载对应的版本 2.1 官网的历史版本位置 我这里使用…

vercel无法导入github项目

背景 点击import后,浏览器打开了github的项目链接,而不是有关于项目部署的设置。根据网络上的说法,import后就会出现相关的配置页面,然而没有出现下面是预想的页面然而并没有出现。 解决 使用cli工具。 npm install -g vercel# 登录 vercel login # 部署 vercel回到官网,发…

福气满满-冲刺日志(第一天)

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称 福气满满团队成员学号-名字 052203132童潇剑,102201226陈潇健,102201235曾炜坤,102201234洪庆杨,102201224 陈博涵,18220031…

11.8 每日总结(继续学习redis)

今天依旧Redis,学习时长2小时。数据结构:

[极客大挑战 2019]Secret File

首页什么都没有,查看网页源码,发现有一个链接,提示found除去view-source访问,得到以下页面,点击secret直接查阅结束,没回显flag,依旧在卖关子。使用burp suite抓包获取返回的源码,找到注释中有个文件secr3t.php访问secr3t.php得到代码里说flag在flag.php里,直接访问fl…

CCTV 新闻节目 All In One

CCTV 新闻节目 All In One 世界周刊 《世界周刊》着力于信息整合,打破不同媒体间隔,从海量的信息碎片中捕捉世界发展的轨迹,从每周的国际事件中提炼出最有价值的内容。CCTV 新闻节目 All In One世界周刊《世界周刊》着力于信息整合,打破不同媒体间隔,从海量的信息碎片中捕…

厉害了,8.7w人打满分!如果我找 BUG 能像他一样厉害就好了!

你好呀,我是歪歪。 最近在 B 站上看到一个让我觉得“非常哇塞”视频的:https://www.bilibili.com/video/BV1y4421U72G/视频的播放量有接近 400w,在视频快结尾的地方,UP 主设置了一个打分的互动:8.7 万人参与,平均 10 分。这参与度和平均分,歪师傅作为在 B 站混迹多年的用…

JAVA反序列化学习-CommonsCollections2(基于ysoserial)

环境准备 JDK1.8(8u421)这里ysoserial,我以本地的JDK8版本为准、commons-collections4(4.0 以ysoserial给的版本为准)、javassist(3.12.1.GA) cc4.0、ClassPool <dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4&…

先天软工圣体队———冲刺日记(第四天)

1. 每位团队成员的分工与进度成员 完成的任务 完成的任务时长 剩余时间何愉心、邱雨涵 对vlog做最终的修改,美化。为实验课做准备 2小时 6小时陈思雨,郑奇键 搜集筛选资料,填充资料库 1小时 11小时陈尚冰 对web页面的边框,按键美化 3小时 10小时柯鸿毅 AI接口调用测试,修改…

电子元器件外贸购买

前言 最近忙着采购外国一款品牌的连接器(说人话就是端子),有很多专业术语需要理解。PKG是什么意思? 指产品的包装方式或包装材料, PKG是packaging的缩写. 请结合具体的环境确认是指包装方式还是包装材料.有时, 客户会说quotation package, 这里指的是将所有报价资料打包,里…

看过这个,你可能更了解指针4

如图,我们先看以下问题在稍微思考过后,先把你的答案记下来吧。 接下来我们分析 ****1中arr被单独放入sizeof中,表示整个数组,则计算整个数组的大小, 且sizeof计算的大小包含\0,则在sizeof看来数组arr有7个元素, 类型为char,7乘1=7 ****2中arr没有单独放入sizeof中,也没…