二分(聪明的质检员)

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

题目描述

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

  1. 给定$ m$ 个区间 [ l i , r i ] [l_i,r_i] [li,ri]
  2. 选出一个参数 W W W
  3. 对于一个区间 [ l i , r i ] [l_i,r_i] [li,ri],计算矿石在这个区间上的检验值 y i y_i yi

y i = ∑ j = l i r i [ w j ≥ W ] × ∑ j = l i r i [ w j ≥ W ] v j y_i=\sum\limits_{j=l_i}^{r_i}[w_j \ge W] \times \sum\limits_{j=l_i}^{r_i}[w_j \ge W]v_j yi=j=liri[wjW]×j=liri[wjW]vj

其中 j j j 为矿石编号。

这批矿产的检验结果 y y y 为各个区间的检验值之和。即: ∑ i = 1 m y i \sum\limits_{i=1}^m y_i i=1myi

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

输入格式

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

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

接下来的 m m m 行,表示区间,每行两个整数,中间用空格隔开,第 i + n + 1 i+n+1 i+n+1 行表示区间 [ l i , r i ] [l_i,r_i] [li,ri] 的两个端点 l i l_i li r i r_i ri。注意:不同区间可能重合或相互重叠。

输出格式

一个整数,表示所求的最小值。

样例 #1

样例输入 #1

5 3 15 
1 5 
2 5 
3 5 
4 5 
5 5 
1 5 
2 4 
3 3

样例输出 #1

10

提示

【输入输出样例说明】

W W W 4 4 4 的时候,三个区间上检验值分别为 20 , 5 , 0 20,5 ,0 20,5,0 ,这批矿产的检验结果为 25 25 25,此时与标准值 S S S 相差最小为 10 10 10

【数据范围】

对于 $10% $ 的数据,有 1 ≤ n , m ≤ 10 1 ≤n ,m≤10 1n,m10

对于 $30% $的数据,有 1 ≤ n , m ≤ 500 1 ≤n ,m≤500 1n,m500

对于 $50% $ 的数据,有 $ 1 ≤n ,m≤5,000$;

对于 70 % 70\% 70% 的数据,有 1 ≤ n , m ≤ 10 , 000 1 ≤n ,m≤10,000 1n,m10,000

对于 100 % 100\% 100% 的数据,有 $ 1 ≤n ,m≤200,000$, 0 < w i , v i ≤ 1 0 6 0 < w_i,v_i≤10^6 0<wi,vi106 0 < s ≤ 1 0 12 0 < s≤10^{12} 0<s1012 1 ≤ l i ≤ r i ≤ n 1 ≤l_i ≤r_i ≤n 1lirin

整体思路

一开始做这道题的时候很没有思路,但是目标很明确:1.二分2.进行模拟,但是一开始是没想到用前缀和的。。。
由题目可知,当w在逐渐变大的时候,那么大于w的物品数目一定变小,那么权值小,但是要注意,最后要求的是绝对值,不是最小值,所以有:
当y>s,我们需要更大的w,这样可以使y的值相应变小,便于得到绝对值得最小值
当y<s,我们需要更小的w,这样可以使y的值相应变大,便于得到绝对值得最小值

注意事项

前缀和前缀和前缀和前缀和前缀和
(第三次栽了)

完整代码

#include<bits/stdc++.h>
#define maxn 2000010
#define int long long
using namespace std;
int n,m,r=0,l=214748364,mid,ans=999999999999999,s,sum,w[maxn],v[maxn],rt[maxn],lf[maxn],pv[maxn],pn[maxn];
inline bool ck(int x){memset(pv,0,sizeof(pv));memset(pn,0,sizeof(pn));//数组初始化~~~for(int i=1;i<=n;i++)if(w[i]>=x){pv[i]=pv[i-1]+v[i];pn[i]=pn[i-1]+1;}else{pv[i]=pv[i-1];pn[i]=pn[i-1];}//进行前缀和或者不进行前缀和(舍弃或者是不舍弃)int y=0;for(int i=1;i<=m;i++)y+=(pn[rt[i]]-pn[lf[i]-1])*(pv[rt[i]]-pv[lf[i]-1]);//计算检验值sum=abs(y-s);if(y>s)	return 1;return 0;//找与标准差最小的
}
signed main(){scanf("%lld%lld%lld",&n,&m,&s);for(int i=1;i<=n;i++) {scanf("%lld%lld",&w[i],&v[i]);r=max(r,w[i]);l=min(l,w[i]);}//取最大值或者最小值for(int i=1;i<=m;i++) scanf("%lld%lld",&lf[i],&rt[i]);l-=1;r+=2;while(l<=r){mid=(l+r)>>1;//找一个中点作为代表值进行二分if(ck(mid)) l=mid+1;else r=mid-1;//向左或者向右(舍弃区间ans=min(ans,sum);}ans=min(ans,sum);//确定中点求值printf("%lld",ans);return 0;
}

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

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

相关文章

Docker容器引擎(5)

目录 一.docker-compose docker-compose的三大概念&#xff1a; yaml文件格式&#xff1a; json文件格式&#xff1a; docker-compose 配置模板文件常用的字段&#xff1a; 二.Docker Compose 环境安装&#xff1a; 查看版本&#xff1a; 准备好nginx 的dockerfile的文…

Vue中的插槽Slot如何使用

在Vue中&#xff0c;插槽&#xff08;Slot&#xff09;允许你在组件的模板中定义一些可变内容&#xff0c;以便在使用组件时进行替换或传递额外的内容。插槽是Vue中组件化开发的一个重要特性&#xff0c;它使得组件更加灵活和可复用。 以下是使用插槽的步骤&#xff1a; 在组件…

AS-V1000产品介绍:支持GA/T1400视图库标准(可通过GA/T1400接入海康、华为、大华等图传前端设备,实现图传功能)

目 录 一、概述 二、AS-V1000视频监控管理平台的特点 二、视频监控平台通过GA/T1400接入前端设备 &#xff08;一&#xff09;接入华为GA/T1400前端设备 &#xff08;二&#xff09;接入大华GA/T1400前端设备 &#xff08;三&#xff09;接入海康威视GA/…

杂题——试题-算法训练-P0602

分析&#xff1a; 把要重排序的数字转成数组对数组进行排序&#xff0c;从小到大排序数组转成字符串&#xff0c;字符串转成数字&#xff0c;得到最小数再把最小数的字符串反转&#xff0c;得到最大数注意&#xff1a; 在java语言中&#xff0c;如果使用Arrays.toString(digits…

EasyExcel根据对应的实体类模板完成多个sheet的写入与读取

1.展示模板一的实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowH…

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 #经验分享#知识分享#媒体

问题&#xff1a;第十三届全国人民代表大会第四次会议召开的时间是&#xff08;&#xff09;。 A. 2018年3月3日至3月11日 B. 2019年3月5日至3月11日 C. 2020年3月5日至3月11日 D. 2021年3月5日至3月11日 参考答案如图所示 问题&#xff1a;顾客满意是顾客对一件产品满足…

失物招领|基于Springboot的校园失物招领系统设计与实现(源码+数据库+文档)

校园失物招领系统目录 目录 基于Springboot的校园失物招领系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、 管理员功能实现 (1) 失物招领管理 (2) 寻物启事管理 (3) 公告管理 (4) 公告类型管理 2、用户功能实现 (1) 失物招领 (2) 寻物启事 (3) 公告 …

[ARC145E] Adjacent XOR 题解

推荐在 cnblogs 上阅读。 [ARC145E] Adjacent XOR 题解 这道题真的是道神仙题&#xff0c;是那种考场想不出来、补题也补得十分艰难的题。可能我还是太菜了。 看了 APJ 大神的题解&#xff0c;琢磨很久才懂。为了帮助像我一样的同学&#xff0c;特地写一篇题解。 这是 2 月…

Centos7环境安装PHP8

一、安装必要的模块 yum install -y bzip2-devel libcurl-devel libxml2-devel sqlite-devel oniguruma oniguruma-devel libxml2 libxml2-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel zstd libzstd-devel curl libcurl-devel libpng libpng-devel …

AI大模型开发架构设计(8)——从 AI 编程助手到 AI Agent 应用实战

文章目录 从 AI 编程助手到 AI Agent 应用实战1 AI Agent是什么?和AI编程如何协同?AI Agent是什么?AI Agent 案例AI Agent 三种范式AI Agent 和 AI 编程如何协同?2 AGI/LLM/Lightweight AI Agent剖析AGI AgentsLightweight AI Agents3 Lightweight AI Agent技术剖析技术架构…

【日常总结】宝塔中 Gitlab服务器 forbidden

一、场景 二、问题 三、原因 四、解决方案 五、实战 Stage 1&#xff1a;打开 /etc/gitlab/gitlab.rb&#xff0c;并编辑 Stage 2&#xff1a;重启gitlab服务 Stage 3&#xff1a;测试&#xff08;打开girlab网页&#xff09; 六、后续 一、场景 公司更换新电脑 服务…

使⽤COCO数据集训练YOLOX

注意&#xff1a; 训练的时候&#xff0c;如果GPU不够&#xff0c;可以修改batchsize大小。 (yolox) xuefeif123:/mnt/d/BaiduNetdiskDownload/CV/YOLOX$ ls LICENSE README.md assets checkpoints demo exps requirements.txt setup.py tools yolox M…

C语言——P/文件操作

一、为什么使用文件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久…

[Git版本控制系统]

Git是一种版本控制系统&#xff0c;用于跟踪和控制计算机文件的更改。它具有以下几个基本概念&#xff1a; 仓库&#xff08;Repository&#xff09;&#xff1a;Git使用仓库来存储项目的所有文件和历史记录。仓库可以分为本地仓库和远程仓库。本地仓库存在于本地计算机上&…

数据结构—动态查找表

动态查找介绍 1. 动态查找的引入&#xff1a;当查找表以线性表的形式组织时&#xff0c;若对查找表进行插入、删除或排序操作&#xff0c;就必须移动大量的记录&#xff0c;当记录数很多时&#xff0c;这种移动的代价很大。 2. 动态查找表的设计思想&#xff1a;表结构本身是…

web前端开发--------阴影与转换

1.阴影分为文本阴影和盒子阴影 我们使用text-shadow属性为文本添加阴影效果&#xff0c;使用结构伪类为第一个子元素p添加阴影效果&#xff1b; 水平偏移量为负值时&#xff0c;表示阴影向左偏移&#xff1b; &#xfeff;垂直偏移量为负值时&#xff0c;表示阴影向上偏移。 …

【Vue】2-14、插槽 自定义指令

一、插槽 插槽&#xff08;Slot&#xff09;是 vue 为组件的封装者提供的能力。允许封装者在封装组件时&#xff0c;把不确定的&#xff0c;希望由用户指定的部分定义为插槽。 <template><div class"app-container"><h1>App 根组件</h1>&…

【Mysql】数据库架构学习合集

目录 1. Mysql整体架构1-1. 连接层1-2. 服务层1-3. 存储引擎层1-4. 文件系统层 2. 一条sql语句的执行过程2-1. 数据库连接池的作用2-2. 查询sql的执行过程2-1. 写sql的执行过程 1. Mysql整体架构 客户端&#xff1a; 由各种语言编写的程序&#xff0c;负责与Mysql服务端进行网…

go数据操作-elasticsearch

go-elasticsearch是Elasticsearch 官方提供的 Go 客户端。每个 Elasticsearch 版本会有一个对应的 go-elasticsearch 版本。 1.安装依赖 执行以下命令安装v8版本的 go 客户端。 go get github.com/elastic/go-elasticsearch/v8latest导入依赖。 import "github.com/el…

vue学习——elementPlus安装及国际化

引入完整的elementPlus 安装 pnpm i element-plus引入 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app createApp(App)app.use(ElementPlus) app.mount(#app)图标…