蓝桥杯二分题
P1083 [NOIP2012 提高组] 借教室
题目描述
在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。
面对海量租借教室的信息,我们自然希望编程解决这个问题。
我们需要处理接下来 𝑛n 天的借教室信息,其中第 𝑖i 天学校有 𝑟𝑖ri 个教室可供租借。共有 𝑚m 份订单,每份订单用三个正整数描述,分别为 𝑑𝑗,𝑠𝑗,𝑡𝑗dj,sj,tj,表示某租借者需要从第 𝑠𝑗sj 天到第 𝑡𝑗tj 天租借教室(包括第 𝑠𝑗sj 天和第 𝑡𝑗tj 天),每天需要租借 𝑑𝑗dj 个教室。
我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提供 𝑑𝑗dj 个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。
借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。这里的无法满足指从第 𝑠𝑗sj 天到第 𝑡𝑗tj 天中有至少一天剩余的教室数量不足 𝑑𝑗dj 个。
现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改订单。
输入格式
第一行包含两个正整数 𝑛,𝑚n,m,表示天数和订单的数量。
第二行包含 𝑛n 个正整数,其中第 𝑖i 个数为 𝑟𝑖ri,表示第 𝑖i 天可用于租借的教室数量。
接下来有 𝑚m 行,每行包含三个正整数 𝑑𝑗,𝑠𝑗,𝑡𝑗dj,sj,tj,表示租借的数量,租借开始、结束分别在第几天。
每行相邻的两个数之间均用一个空格隔开。天数与订单均用从 11 开始的整数编号。
输出格式
如果所有订单均可满足,则输出只有一行,包含一个整数 00。否则(订单无法完全满足)
输出两行,第一行输出一个负整数 −1−1,第二行输出需要修改订单的申请人编号。
输入输出样例
输入 #1复制
4 3 2 5 4 3 2 1 3 3 2 4 4 2 4输出 #1复制
-1 2说明/提示
【输入输出样例说明】
第 11份订单满足后,44天剩余的教室数分别为 0,3,2,30,3,2,3。第 22 份订单要求第 22天到第 44 天每天提供33个教室,而第 33 天剩余的教室数为22,因此无法满足。分配停止,通知第22 个申请人修改订单。
【数据范围】
对于10%的数据,有1≤𝑛,𝑚≤101≤n,m≤10;
对于30%的数据,有1≤𝑛,𝑚≤10001≤n,m≤1000;
对于 70%的数据,有1≤𝑛,𝑚≤1051≤n,m≤105;
对于 100%的数据,有1≤𝑛,𝑚≤106,0≤𝑟𝑖,𝑑𝑗≤109,1≤𝑠𝑗≤𝑡𝑗≤𝑛1≤n,m≤106,0≤ri,dj≤109,1≤sj≤tj≤n。
NOIP 2012 提高组 第二天 第二题
2022.2.20 新增一组 hack 数据
import java.io.*;// 主类,程序的入口
public class Main {// 用于从标准输入读取数据并进行词法分析的工具类实例,这里配置为从标准输入流读取private static final StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));// 用于向标准输出写入数据的实例private static final PrintWriter pw = new PrintWriter(System.out);// 表示天数private static int n;// 表示订单数量private static int m;// r[i]表示第i天可用于租借的教室数量private static int[] r;// d数组用于存储每份订单每天需要租借的教室数量private static int[] d;// s数组用于存储每份订单租借开始的天数private static int[] s;// t数组用于存储每份订单租借结束的天数private static int[] t;// diff[i]用于存储第i天与前一天可租借教室数量的差值(r[i] - r[i - 1])private static int[] diff;// 从输入流中读取下一个整数的方法,通过StreamTokenizer解析并返回整数值private static int nextInt() throws IOException {in.nextToken();return (int) in.nval;}// 读取输入数据的方法,包括天数、每天可租借教室数量以及各份订单信息private static void read() throws IOException {// 读取天数n = nextInt();// 读取订单数量m = nextInt();// 初始化r数组,长度为n + 1,索引从1开始对应天数r = new int[n + 1];// 初始化diff数组,长度为n + 1,用于记录相邻两天可租借教室数量差值diff = new int[n + 1];for (int i = 1; i <= n; ++i) {// 读取第i天可租借的教室数量r[i] = nextInt();// 计算第i天与前一天可租借教室数量的差值diff[i] = r[i] - r[i - 1];}// 初始化d数组,用于存储每份订单每天需要的教室数量d = new int[m];// 初始化s数组,用于存储每份订单租借开始天数s = new int[m];// 初始化t数组,用于存储每份订单租借结束天数t = new int[m];for (int i = 0; i < m; ++i) {// 读取每份订单每天需要租借的教室数量d[i] = nextInt();// 读取每份订单租借开始的天数s[i] = nextInt();// 读取每份订单租借结束的天数t[i] = nextInt();}}// 尝试根据给定的订单数量来判断是否能够满足这些订单的教室分配需求private static boolean solve(int index) {// book数组用于模拟教室数量的增减情况,类似一个差分数组的应用int[] book = new int[n + 1];// 根据前index份订单来更新book数组,模拟教室分配和回收情况for (int i = 0; i < index; ++i) {// 在租借开始的那天减去相应的教室需求数量,表示被占用了book[s[i]] -= d[i];// 如果租借结束的下一天还在天数范围内,则在那天加上相应的教室数量,表示归还了if (t[i] + 1 <= n) {book[t[i] + 1] += d[i];}}int num = 0;// 遍历每一天,计算累计的教室数量,看是否会出现负数(即教室不够用的情况)for (int i = 1; i <= n; ++i) {num += diff[i] + book[i];if (num < 0) {return false;}}return true;}// 程序的主入口方法public static void main(String[] args) throws IOException {// 先读取输入的天数、订单数量以及相关的教室和订单信息read();// 初始化二分查找的左右边界,left表示最小可能满足所有订单的情况(从第1份订单开始尝试)// right表示最大可能出现不满足情况(所有订单都尝试分配)int left = 1, right = m;int res = 0;// 二分查找过程,通过不断缩小范围来确定是哪份订单导致无法满足教室分配while (left <= right) {int mid = left + right >> 1;// 如果当前尝试的订单数量(mid份订单)能够满足教室分配需求if (solve(mid)) {// 说明可能更多的订单也能满足,将左边界右移,继续尝试更多订单left = mid + 1;} else {// 如果当前mid份订单无法满足教室分配需求,记录当前的mid值(可能就是导致不满足的订单编号)res = mid;// 缩小右边界,继续在左半边查找right = mid - 1;}}// 如果res不为0,说明存在订单无法满足,按照输出格式先输出-1if (res!= 0) {pw.println(-1);}// 输出需要修改订单的申请人编号(res的值就是那个编号,如果所有订单都能满足res就是0)pw.println(res);// 确保输出缓冲区的数据被刷新并输出到标准输出pw.flush();}
}
P4343 [SHOI2015] 自动刷题机
题目背景
曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机——一种可以自动 AC 题目的神秘装置。
题目描述
自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序。每秒,自动刷题机的代码生成模块会有两种可能的结果:
1.写了 𝑥x 行代码
2.心情不好,删掉了之前写的 𝑦y 行代码。(如果 𝑦y 大于当前代码长度则相当于全部删除。)对于一个 OJ,存在某个固定的正整数长度 𝑛n,一旦自动刷题机在某秒结束时积累了大于等于 𝑛n 行的代码,它就会自动提交并 AC 此题,然后新建一个文件(即弃置之前的所有代码)并开始写下一题。SHTSC 在某个 OJ 上跑了一天的自动刷题机,得到了很多条关于写代码的日志信息。他突然发现自己没有记录这个 OJ 的 𝑛n 究竟是多少。所幸他通过自己在 OJ 上的 Rank 知道了自动刷题机一共切了 𝑘k 道题,希望你计算 𝑛n 可能的最小值和最大值。
输入格式
第一行两个整数 𝑙,𝑘l,k,表示刷题机的日志一共有 𝑙l 行,一共了切了 𝑘k 题。
接下来 𝑙l 行,每行一个整数 𝑥𝑖xi,依次表示每条日志。若 𝑥𝑖≥0xi≥0,则表示写了 𝑥𝑖xi 行代码,若 𝑥𝑖<0xi<0,则表示删除了 −𝑥𝑖−xi 行代码。
输出格式
输出一行两个整数,分别表示 𝑛n 可能的最小值和最大值。
如果这样的 𝑛n 不存在,请输出一行一个整数 −1−1。输入输出样例
输入 #1复制
4 2 2 5 -3 9输出 #1复制
3 7说明/提示
数据规模与约定
- 对于 20%20% 的数据,保证 𝑙≤10l≤10;
- 对于 40%40% 的数据,保证 𝑙≤100l≤100 ;
- 对于 60%60% 的数据,保证𝑙≤2×103l≤2×103;
- 对于 100%100% 的数据,保证 1≤𝑙≤1051≤l≤105,−109≤𝑥𝑖≤109−109≤xi≤109
import java.io.*;public class Main {// 用于从标准输入读取数据并进行词法分析的工具类实例,配置为从标准输入流读取private static final StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));// 用于向标准输出写入数据的实例private static final PrintWriter pw = new PrintWriter(System.out);// 表示刷题机的日志行数,即操作记录的数量private static int l;// 表示自动刷题机一共AC的题目数量private static int k;// x数组用于存储每条日志对应的操作(写代码行数或删代码行数)private static int[] x;// 从输入流中读取下一个整数的方法,通过StreamTokenizer解析并返回整数值private static int nextInt() throws IOException {in.nextToken();return (int) in.nval;}// 读取输入数据的方法,包括日志行数、AC题目数量以及每条日志对应的操作信息private static void read() throws IOException {// 读取刷题机的日志行数l = nextInt();// 读取自动刷题机一共AC的题目数量k = nextInt();// 初始化x数组,长度为l,用于存储每条日志对应的操作信息x = new int[l];for (int i = 0; i < l; ++i) {// 依次读取每条日志对应的操作(写代码行数或删代码行数)x[i] = nextInt();}}// 根据给定的代码行数阈值n,模拟自动刷题机的工作过程,计算按照此阈值能AC的题目数量private static int solve(long n) {int cnt = 0; // 用于记录按照给定阈值能AC的题目数量long len = 0; // 用于记录当前积累的代码行数for (int i = 0; i < l; ++i) {// 累加当前操作对应的代码行数变化(写代码增加,删代码减少)len += x[i];// 如果当前积累的代码行数大于等于阈值n,或者代码行数小于0(可能删多了)if (len >= n || len < 0) {// 如果代码行数大于等于阈值,说明完成了一题,题目数量加1cnt += (len >= n? 1 : 0);// 无论哪种情况(完成一题或者代码删没了),都重新开始积累代码,将代码行数置0len = 0;}}return cnt;}// 通过二分查找的方式,在给定的区间内查找满足条件的代码行数阈值n// minFlag用于区分是查找最小值还是最大值,true表示查找最小值,false表示查找最大值private static long search(long left, long right, boolean minFlag) {long res = -1; // 用于记录最终查找到的满足条件的阈值,初始化为-1表示未找到while (left <= right) {long mid = left + right >> 1; // 取中间值作为当前尝试的阈值int cnt = solve(mid); // 根据当前中间阈值,计算能AC的题目数量if (cnt < k) {// 如果计算出的AC题目数量小于给定的k,说明阈值大了,缩小查找区间(右移右边界)right = mid - 1;} else if (cnt > k) {// 如果计算出的AC题目数量大于给定的k,说明阈值小了,扩大查找区间(左移左边界)left = mid + 1;} else {// 如果计算出的AC题目数量等于给定的k,说明找到了一个满足条件的阈值res = mid;if (minFlag) {// 如果是查找最小值,继续缩小查找区间,往更小的值方向找(右移右边界)right = mid - 1;} else {// 如果是查找最大值,继续扩大查找区间,往更大的值方向找(左移左边界)left = mid + 1;}}}return res;}// 程序的主入口方法public static void main(String[] args) throws IOException {// 先读取输入的日志行数、AC题目数量以及每条日志对应的操作信息read();// 如果日志行数小于AC题目数量,说明不可能存在满足条件的阈值,直接输出-1并结束程序if (l < k) {System.out.println(-1);return;}// 查找代码行数阈值n的最小值,传入初始查找区间和表示查找最小值的标识long min = search(1, (long) 10e14, true);// 如果未找到最小值(返回-1),说明不存在满足条件的阈值,输出-1并结束程序if (min == -1) {System.out.println(-1);return;}// 查找代码行数阈值n的最大值,传入初始查找区间和表示查找最大值的标识long max = search(1, (long) 10e14, false);// 输出找到的代码行数阈值n的最小值和最大值System.out.println(min + " " + max);}
}
相关文章:
蓝桥杯二分题
P1083 [NOIP2012 提高组] 借教室 题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租…...

3D数字化革新,探索博物馆的正确打开新方式!
3D数字化的发展,让博物馆也焕发新机,比如江苏省的“云上博物”,汇聚江苏全省博物馆展陈资源,采取线上展示和线下体验两种方式进行呈现的数字展览项目。在线上,用户可以通过H5或小程序进入“云上博物”数字展览空间&…...
工业检测基础-工业相机选型及应用场景
以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据: 2D相机 检测原理:基于二维图像捕获,通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景:广泛应用于平面工件的外观检测,如检测…...

通过 FRP 实现 P2P 通信:控制端与被控制端配置指南
本文介绍了如何通过 FRP 实现 P2P 通信。FRP(Fast Reverse Proxy)是一款高效的内网穿透工具,能够帮助用户突破 NAT 和防火墙的限制,将内网服务暴露到公网。通过 P2P 通信方式,FRP 提供了更加高效、低延迟的网络传输方式…...

即时通信系统项目总览
聊天室服务端项目总体介绍 本项目是一个全栈的即时通信系统, 前端使用QT实现聊天客户端, 后端采⽤微服务框架设计, 由网关子服务统一接收客户端的请求, 再分发到不同的子服务上处理并将结果返回给网关, 网关再将响应转发给客户端 拆分的微服务包含: 网关服务器&…...

QT获取tableview选中的行和列的值
查询数据库数据放入tableview(tableView_database)后 QSqlQueryModel* sql_model new QSqlQueryModel(this);sql_model->setQuery("select * from dxxxb_move_lot_tab");sql_model->setHeaderData(0, Qt::Horizontal, tr("id&quo…...

GDPU 人工智能 期末复习
1、python基础 2、回归、KNN、K-Means、搜索方法思想及算法实现步骤 3、知识表示基本概念 4、状态空间的相关概念、表示方法及应用 5、图搜索策略及应用 6、问题归约概念、与或图搜索、博弈树搜索与剪枝 7、决策树、贝叶斯决策算法及其应用 8、神经网络与深度学习基本概念 一、…...

编程之路,从0开始:补充篇
Hello大家好!很高兴和大家又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《题海拾贝》、《数据结构与算法之美》 欢迎点赞,关注! 这篇…...
使用缓存提升Web应用性能:从新手到高手的实践指南
引言 在现代Web开发中,性能优化是确保用户体验和系统稳定性的关键。使用缓存是提升网站性能的有效手段之一,可以显著减少数据库访问和计算开销。根据“网站优化第一定律”,缓存可以提升网站的响应速度,减少延迟,从而改…...

【数字电路与逻辑设计】实验一 序列检测器
文章总览:YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验一 序列检测器 一、实验内容二、设计过程(一)作出状态图或状态表(二)状态化简(三)状态编码 三、源代码(一ÿ…...

运动模糊效果
1、运动模糊效果 运动模糊效果,是一种用于 模拟真实世界中快速移动物体产生的模糊现象 的图像处理技术,当一个物体以较高速度移动时,由于人眼或摄像机的曝光时间过长,该物体会在图像中留下模糊的运动轨迹。这种效果游戏、动画、电…...

养老护理员培训考试题库;免费题库;大风车题库
下载链接:大风车题库-文件 大风车题库网站:大风车题库 大风车excel(试题转excel):大风车excel...
Python-配置模块configparser使用指南
configparser 是 Python 标准库中的模块,用于处理配置文件(如 .ini 文件)。它适合管理程序的配置信息,比如数据库连接参数、应用程序设置等。 1. 配置文件的基本结构 配置文件通常是 .ini 格式,由 节(Sec…...
C++的HDF5库将h5图像转为tif格式:szip压缩的图像也可转换
本文介绍基于C 语言的hdf5库与gdal库,将.h5格式的多波段HDF5图像批量转换为.tif格式的方法;其中,本方法支持对szip压缩的HDF5图像(例如高分一号卫星遥感影像)加以转换。 将HDF5图像批量转换为.tif格式,在部…...

【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)
本文详细介绍了String类以及常用的String相关方法,以及StrinBuftrer , StringBulder相关方法的使用,建议有印象即可,不需要都记住,使用时去查取即可 一、创建一个String类型的变量 我们平时创建String类型的变量一般是第一种形式…...
WordPress安装或访问时出现数据库连接错误的处理方式
一、在安装时出现数据库连接错误 1、如果数据库名称、用户名或密码错误,或者主机设置不正确(如数据库服务器不是在本地localhost,而是在远程服务器,需要正确填写远程服务器的 IP 地址或域名),就会导致连接错…...

JAVA-面向对象基础
文章目录 概要封装多态抽象类接口内部类为什么需要内部类 概要 面向对象是一种编程范式或设计哲学,它将软件系统设计为由多个对象组成,这些对象通过特定的方式相互作用 封装 将数据和操作数据的方法封装在一个类中,并通过访问修饰符控制对…...

[Java]项目入门
这篇简单介绍一些入门的有关项目和行业的知识,并带着实现一个小项目。便于已经编程入门的各位准备进阶到下一个阶段。 先大致地介绍,一个完整的项目(不看客户端、服务端的分类)基本可以划分为三部分: 1.前端。比如你现在看到的CSDN页面就是一…...
opencv Mat To Heif
高效率图像文件格式(英语:High Efficiency Image File Format, HEIF;也称高效图像文件格式)是一个用于单张图像或图像序列的文件格式。它由运动图像专家组(MPEG)开发,并在MPEG-H Part 12&#x…...
二刷代码随想录第24天
93. 复原 IP 地址 确定函数is_ip的实现细节,start不能超过end,没有0开头的非0数字,每个字符都在0-9之间,每段字符小于255在原字符串s上做操作会更简单一些 class Solution { public:vector<string> result;vector<string> rest…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...