【C++贪心 二分查找】P6473 [NOI Online #2 入门组] 未了|普及

本文涉及知识点

本博文代码打包下载
C++贪心
C++二分查找

[NOI Online #2 入门组] 未了

题目描述

由于触犯天神,Sisyphus 将要接受惩罚。

宙斯命 Sisyphus 推一块巨石上长度为 L L L 的山坡。Sisyphus 匀速向上推的速度为每年 v v v 的长度(由于是匀速,故经过 1 2 \frac{1}{2} 21 年将能向上推 v 2 \frac{v}{2} 2v 的长度)。然而,宙斯并不希望 Sisyphus 太快到达山顶。宙斯可以施展 n n n 个魔法,若宙斯施展第 i i i 个魔法 ( 1 ≤ i ≤ n ) (1\leq i \leq n) (1in),则当 Sisyphus 第一次到达位置 a i a_i ai 时,他将会同巨石一起滚落下山底,并从头推起。(滚落的时间忽略不计,即可看作第一次到达位置 a i a_i ai 后 Sisyphus 立即从山底重新出发)

例如宙斯施用了 a i = 3 a_i=3 ai=3 a i = 5 a_i=5 ai=5 的两个魔法。Sisyphus 的速度 v = 1 v=1 v=1 ,山坡的长度 L = 6 L = 6 L=6,则他推石上山过程如下:

  • 3 3 3 年走到位置 3 3 3

  • a i = 3 a_i=3 ai=3 的魔法影响,回到了山底出发。

  • 再用 3 3 3 年走到位置 3 3 3,然而因为是第二次到达, a i = 3 a_i=3 ai=3 的魔法不起作用。

  • 2 2 2 年走到位置 5 5 5

  • a i = 5 a_i=5 ai=5 的魔法影响,回到了山底出发。

  • 6 6 6 年从山底走到了山顶。花费的总时间为 14 14 14 年。

现在,宙斯有 q q q 个询问。对于第 i i i 个询问 t i t_i ti,宙斯想知道,他最少需要施展多少个魔法才能使 Sisyphus 到达山顶所用的年数大于 t i t_i ti

输入格式

第一行三个整数 n , L , v n,L,v n,L,v 分别表示魔法的种类数,山坡的长度,Sisyphus 的速度。

第二行 n n n 个整数。第 i i i 个整数 a i a_i ai 表示第 i i i 个魔法作用的位置。 ( 1 < i < n ) (1<i<n) (1<i<n)

第三行一个整数 q q q 表示宙斯的询问个数。

接下来 q q q 行每行一个整数,第 i i i 行的整数 t i t_i ti 表示宙斯的第 i i i 个询问。 ( 1 < i < n ) (1<i<n) (1<i<n)

输出格式

输出 q q q 行,每行恰好一个整数,第 i i i 行的整数对应第 i i i 个询问的答案。 ( 1 ≤ i ≤ q ) (1 \leq i\leq q) (1iq)

如果宙斯无论如何都不能使 Sisyphus 使用的年数大于 t i t_i ti,请输出 − 1 -1 1

样例 #1

样例输入 #1

3 6 3
3 5 1
4
1
3
4
5

样例输出 #1

0
1
2
-1

提示

  1. 不使用任何魔法,Sisyphus 需要 2 2 2 年走上山顶。
  2. 使用魔法 2 2 2 ,Sisyphus 需要 11 3 \frac{11}{3} 311 年走上山顶。(用时 5 3 \frac{5}{3} 35 年走到魔法 2 2 2 的位置并滚落下山,再用时 6 3 = 2 \frac{6}{3}=2 36=2 年走到山顶)
  3. 使用魔法 1 , 2 1,2 1,2 ,Sisyphus 需要 14 3 \frac{14}{3} 314 年走上山顶。
  4. 宙斯不能使 Sisyphus 用大于 5 5 5 年的时间走上山顶。

对于测试点 1 ∼ 8 : n = 1 1\sim 8:n=1 18:n=1

对于测试点 9 ∼ 12 : n = 2 9\sim 12:n=2 912:n=2

对于测试点 13 ∼ 17 : n , q ≤ 1000 13\sim 17:n,q\le 1000 1317:n,q1000

对于所有测试点: 1 ≤ n , q ≤ 2 × 1 0 5 1 \leq n,q \leq 2 \times 10^5 1n,q2×105 1 ≤ v ≤ L ≤ 1 0 9 1\leq v\leq L\leq 10^{9} 1vL109 1 ≤ a i < L 1\leq a_i < L 1ai<L 1 ≤ t i ≤ 1 0 9 1 \leq t_i\leq 10^9 1ti109

数据保证 a i a_i ai 两两不同。

贪心+前缀和

假定施法若干次,回退的距离记录到v中。v之和+山顶的距离就是需要爬行的距离。
要想v之和最大,只需取a的最大v.size()个值。
a降序,preSum是其前缀和。upper(preSum,ti × \times ×v-L)-preSum.begin

代码

核心代码

#include <iostream>
#include <sstream>
#include <vector>
#include<map>
#include<unordered_map>
#include<set>
#include<unordered_set>
#include<string>
#include<algorithm>
#include<functional>
#include<queue>
#include <stack>
#include<iomanip>
#include<numeric>
#include <math.h>

#include <bitset>
using namespace std;



template<class T = int>
vector<T> Read(int n,const char* pFormat = "%d") {
	vector<T> ret;
	T d ;
	while (n--) {
		scanf(pFormat, &d);
		ret.emplace_back(d);
	}
	return ret;
}

template<class T = int>
vector<T> Read( const char* pFormat = "%d") {
	int n;
	scanf("%d", &n);
	vector<T> ret;
	T d;
	while (n--) {
		scanf(pFormat, &d);
		ret.emplace_back(d);
	}
	return ret;
}

class Solution {
public:
	vector<int> Query(long long L, long long v, vector<int>& a, vector<int>& que) {
		sort(a.begin(), a.end(), greater<>());
		vector<long long> preSum(1);
		for (const auto& n : a) {
			preSum.emplace_back(n + preSum.back());
		}

		vector<int> ans;
		for (const auto& ti : que) {
			auto n = upper_bound(preSum.begin(), preSum.end(), v * ti - L) - preSum.begin();
			if (n >= preSum.size()) { ans.emplace_back(-1); }
			else { ans.emplace_back(n); }
		}
		return ans;
	}
};

int main() {
#ifdef _DEBUG
	freopen("a.in", "r", stdin);
#endif // DEBUG
	int n,L,v;
	scanf("%d%d%d", &n,&L,&v);

	auto a = Read<int>(n);
	auto que = Read<int>();
	Solution slu;
	auto res = slu.Query(L, v, a, que);
	for (const auto& i : res) {
		std::cout << i << std::endl;
	}

	
	return 0;
}

单元测试

TEST_METHOD(TestMethod11)
		{
			vector<int> a = { 3, 5 ,1 }, que = { 1,3,4,5 };
			auto res = Solution().Query(6, 3, a, que);
			AssertEx({ 0,1,2,-1 }, res);
		}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络 网络层

IP 协议 协议头格式 4 位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4. 4 位头部长度(header length): IP 头部的长度是多少个 32bit, 也就是 4 字节&#xff0c;4bit 表示最大的数字是 15, 因此 IP 头部最大长度是 60 字节. 8 位服务类型(Type Of Service):…

uniapp 微信小程序打包之后vendor.js 主包体积太大,解决办法,“subPackages“:true设置不生效

现在是打包的时候&#xff0c;vendor.js 的内容全部打到了主包里面&#xff0c; 说一下我的方法&#xff1a; 1. 通过发行 小程序打包 这样打包的体积是最小的&#xff0c;打包之后打开微信开发工具&#xff0c;然后再上传 2.manifest.json,在“mp-weixin”里添加代码 "…

python-leetcode-N 皇后

51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; class Solution:def solveNQueens(self, n: int) -> List[List[str]]:res []board [[.] * n for _ in range(n)]def is_safe(row, col):for i in range(row):if board[i][col] Q:return Falseif col - (row - i) >…

【蓝桥杯单片机】客观题

一、第十三届省赛&#xff08;一&#xff09; 二、第十三届省赛&#xff08;二&#xff09;

如何进行ERP系统的定制开发?

在当今数字化时代&#xff0c;企业资源规划&#xff08;ERP&#xff09;系统已然成为企业提升管理效能、优化资源配置以及实现精细化管理的关键工具。然而&#xff0c;鉴于不同企业在行业特性、业务流程以及管理需求等方面存在显著差异&#xff0c;通用型的ERP系统往往难以契合…

基于SpringBoot的校园消费点评管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

MySQL数据库——常见慢查询优化方式

大家好&#xff0c;这里是编程Cookbook。本文详细介绍MySQL的慢查询相关概念&#xff0c;分析步骤及其优化方案等。 文章目录 什么是慢查询日志&#xff1f;慢查询日志的相关参数如何启用慢查询日志&#xff1f;方式一&#xff1a;修改配置文件方式二&#xff1a;通过命令动态启…

【前端基础篇】Day 1

总结&#xff1a; 1. Web标准的构成 2. 基本标签 目录 1. Web标准的构成 2. 基本标签 2.1快捷键 2.2.1标题标签 2.2.2段落和换行标签 2.2.3文本格式化标签 2.2.4div和span标签 2.3.1 图像标签和路径 2.3.2路径 2.3.3超链接标签 2.4注释标签 2.5特殊字符 1. Web标准…

【复习】Redis

数据结构 Redis常见的数据结构 String&#xff1a;缓存对象Hash&#xff1a;缓存对象、购物车List&#xff1a;消息队列Set&#xff1a;点赞、共同关注ZSet&#xff1a;排序 Zset底层&#xff1f; Zset底层的数据结构是由压缩链表或跳表实现的 如果有序集合的元素 < 12…

我与Linux的爱恋:了解信号量+共享内存+消息队列的应用

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 信号量共享内存应用---Server&Client通信client.ccserver.ccnamepipe.hppShm.hpp 消息队列——实现Client&ServerCom.hppClient.ccServer.cc 信号量 信号量…

跟着李沐老师学习深度学习(十六)

继续学习深度学习&#xff08;十六&#xff09; 继续理解transformer 对于transformer的理解感觉还是云里雾里的&#xff0c;今天又找了一些视频进行一个梳理。 一个浅解 在B站学习发现评论区真的很不错&#xff0c;在沐神讲transformer论文的评论下&#xff0c;有一个评论…

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;轻量级模型 ▌DeepSeek-R1-1.5B 内存容量&#xff1a;≥8GB 显卡需求&#xff1a;支持CPU推理&#xff08;无需独立GPU&#xff09; 适用场景&#xff1a;本地环境验证测试/Ollama集成调试 &#xff08;二&a…

hbase集群部署

1.hbase集群的搭建&#xff08;以及内部逻辑&#xff09; 虽然Hmaster有多个&#xff0c;但是属于热备&#xff0c;起作用的就active上的这个。 部署流程&#xff1a; 因为我配置的hadoop是一个非HA的&#xff0c;所以修改为以下 如果是HA的hadoop一定要做以下这一步。 在启动…

2.1 链路层发现协议(LLDP)

LLDP&#xff08;Link Layer Discovery Protocol&#xff0c;链路层发现协议&#xff09;是一种用于网络设备的链路层协议&#xff0c;用于在局域网&#xff08;LAN&#xff09;中自动发现和通告设备的信息。LLDP是一个开放标准协议&#xff0c;定义在IEEE 802.1AB中&#xff0…

3dtiles平移旋转工具制作

3dtiles平移旋转缩放原理及可视化工具实现 背景 平时工作中&#xff0c;通过cesium平台来搭建一个演示场景是很常见的事情。一般来说&#xff0c;演示场景不需要多完善的功能&#xff0c;但是需要一批三维模型搭建&#xff0c;如厂房、电力设备、园区等。在实际搭建过程中&…

LeetCode 2506 统计相似字符串对的数目

一、问题描述 我们面对的问题是处理一个下标从 0 开始的字符串数组 words。题目中定义了一种字符串相似的规则&#xff1a;如果两个字符串由相同的字符组成&#xff0c;那么就认为这两个字符串是相似的。例如&#xff0c;"abca" 和 "cba" 是相似的&#xf…

【Deepseek高级使用教程】Deepseek-R1的5种高级进阶玩法,5分钟教会你Deepseek+行业的形式进行工作重构的保姆级教程

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 最近&#xff0c;有各行各业的小伙伴问我&#xff0c;到底应该怎么将deepseek融入进他们自身的工作流呢&#xff1f;其实这个问题很简单。我就以…

【LeetCode刷题之路】leetcode155.最小栈

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…

Linux版本控制器Git【Ubuntu系统】

文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…

2025年信息科学与工程学院科协机器学习介绍——机器学习基本模型介绍

机器学习 目录 机器学习一.安装基本环境conda/miniconda环境 二.数据操作数据预处理一维数组二维数组以及多维数组的认识访问元素的方法torch中tenson的应用张量的运算张量的广播 三.线性代数相关知识四.线性回归SoftMax回归问题&#xff08;分类问题&#xff09;什么是分类问题…