【ECNU】3633. 双人旋转赛车(C++)

news2024/10/1 23:48:52

目录

题目

输入格式

输出格式

样例

提示

思路

代码


题目

单点时限: 2.0 sec

内存限制: 1024 MB

oxx 和 Xiejiadong 在玩一个双人旋转赛车的小游戏。

他们将进行一些比赛。每局比赛必须按顺序进行,胜者会得到该局对应的分数 xi。

由于 oxx 技艺不精(每局都可以由 Xiejiadong 决定胜负),因此他给自己设置了初始分数 k,希望自己能够一直领先 Xiejiadong。

不过 Xiejiadong 识破了 oxx 的诡计,现在 Xiejiadong 想知道自己至少需要赢几局才可以使得自己能够在某一时刻的比分不落后于 oxx。

若无法达到则输出 −1。

输入格式

第一行两个整数 n,k (1≤n≤106,1≤k≤109),表示游戏局数以及 oxx 初始分数。

第二行 n 个整数 xi (1≤xi≤109),表示每局游戏的分数。

输出格式

一个整数,表示答案。

样例

input

3 3
4 1 2

output

1

input

3 7
1 2 3

output

-1

提示

样例一:Xiejiadong 只需要赢第一局,即可获得 4 分,这时候就不落后于 oxx 3 分。

样例二:Xiejiadong 全胜也领先不了。

 

思路

难度评级:⭐️⭐️⭐️

贪心思想,是用二分法,将问题转化为判定性问题

重点是判定的函数怎么写:

    1. 判定xie赢x局后是否有可能不输给oxx;

    2. 先假设xie前x局都赢了,此时分数如果不低于oxx的,那么x局满足条件;

    3. 否则,让xie先再赢一局,然后再输掉这些局中分数奖励最低的一局,如此往复,判断x局是否满足条件;

    4. 每次都只需要获取分数最低的一局,所以只需要使用小根堆来记录xie赢得所有局即可,小根堆可以用priority_queue优先队列轻松实现;

代码

#include <iostream>
#include <vector>
#include <queue> 

using namespace std;
typedef long long ll;

vector<int> point;

bool judge(int n,int k,int target) {
	// 先统计前target局Xiejiadong都赢的情况
	ll oxxPoint=k;
	ll xiePoint=0;
	priority_queue<int,vector<int>,greater<int>> q;// 默认是大根堆,less也是大根堆,小根堆是greater 
	for(int i=0;i<target;i++) {
		q.push(point[i]); 
		xiePoint+=point[i];
		if(xiePoint>=k) return true;
	} 
	
	// 前target局都赢都没有办法超过oxx,下面开始紧跟着后面赢一局
	// 然后输掉所有赢得局中分数最低的一局,如此循环
	// 用优先队列实现小根堆,可以更快速地知道一些数据中的最小值 
	for(int i=target;i<n;i++) {
		q.push(point[i]);
		xiePoint+=point[i];
		xiePoint-=q.top();
		oxxPoint+=q.top();
		q.pop();
		
		if(xiePoint>=oxxPoint) return true;
	}
	
	return false;
}

int main(int argc, char** argv) {
	int n,k;
	cin>>n>>k;
	
	point.resize(n);
	for(int i=0;i<n;i++) cin>>point[i];
	
	// 二分判定法找到最少的局数
	int left=1,right=n;
	while(left<=right) {
		int middle=(left+right)>>1;
		if(judge(n,k,middle)) right=middle-1;
		else left=middle+1;
	} 
	if(left>n) cout<<-1;
	else cout<<left;
	return 0;
}

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

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

相关文章

PMP®考试抽中审查提供的材料

PMP审查流程&#xff1a;属于第一类的申请者&#xff08;学士学位或同等学位及以上&#xff09;1&#xff0e; 核实学士学位或同等学位2&#xff0e; 核实项目管理经验3&#xff0e; 核实35小时的项目管理教育属于第二类的申请者&#xff08;高中、大专或同等学历&#xff09;1…

解决httprunner3.x上$符号无法当成普通符号用的方法

前言 由于要测试的api中会涉及$符号的传递, 要求其放在参数中当一个普通符号使用, 但由于httprunner框架处理逻辑, 会将如$coe当成一个变量, 从而报错找不到该变量的值 现象 接口某参数为: coeConfig$coal$08d99cca03a84d1d9e9a49b4534bb598运行时框架会抛出异常: 分析 研读框…

iphone系统崩溃数据能恢复吗?教你三招方法

最近有些苹果用户反应自己手机的屏幕无法滑动&#xff0c;桌面上APP也无法点开&#xff0c;想要关机重启下试试&#xff0c;可是&#xff0c;连关机都关不了&#xff0c;甚至连Siri都罢工了。苹果手机系统崩溃&#xff0c;出现黑屏、白屏、无限重启之类的故障&#xff0c;导致手…

rtthread 线程

创建动态线程最简单代码 #include <rtthread.h>//包含头文件static rt_thread_t thread1 RT_NULL; //创建线程控制块指针&#xff0c;指向空static void thread1_entry(void *parameter)//线程入口&#xff08;干什么&#xff09; {rt_kprintf("do something"…

ChatGPT 爆火,社交应用如何 Get 新技能

风浪越大&#xff0c;鱼越贵。关注【融云全球互联网通信云】了解更多 现在&#xff0c;最大的浪无疑属于 ChatGPT&#xff0c;一款以对话方式进行交互的语言模型。 通过创新业务打下江山的商业传奇们&#xff0c;都怕跟丢了这波浪潮而成为“上一代人”。所以&#xff0c;我们…

[文件操作] File 类的用法和 InputStream, OutputStream 的用法

能吃是不是件幸福的事呢 文章目录前言1. 文件的相关定义2. 文件类型3. Java对文件系统的操作3.1 对文件的基础操作3.2 读文件3.3 写文件前言 从这章开始,我们就开始学文件操作相关的知识了~ 1. 文件的相关定义 1.文件的定义可以从狭义和广义两个方面解释. 狭义: 指硬盘上的文…

Redis学习笔记:缓存运用常见问题

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育 目录1、数据一致性的问题1.1、新增数据一致性的问题1.2、修改/删除一致性问题1.2.1、操作分析1.2.1、总结和再深入2、缓存穿透&#xff0c;缓存击穿和缓存雪崩2.1、缓存穿透&#xff08;查不到&#xff09;2.1.1、…

从功能到自动化,熬夜3天整理出这一份2000字学习指南~

学习自动化这个想法&#xff0c;其实自己在心里已经琢磨了很久&#xff0c;就是一直没付诸实践&#xff0c;觉得现在手工测试已经能满足当前的工作需要&#xff0c;不想浪费时间去学习新的东西&#xff0c;有点时间还不如刷刷视频、看看小说等。 第一次有学习Selenium的冲动是…

【Bio】碳水化合物 carbohydrate 和糖蛋白 glycoprotein

文章目录碳水化合物 carbohydrate单糖 monosaccharides戊糖 pentose己糖 hexose双糖 disaccharide寡糖 oligosaccharide 和多糖 polysaccharide糖蛋白 glycoproteinRef碳水化合物 carbohydrate 碳水化合物 (carbohydrate)&#xff0c;也是糖类&#xff0c;指的是一系列多羟基 …

pwnlab通关流程

pwnlab通关 关于文件包含&#xff0c;环境变量劫持的一个靶场 信息收集 靶机ip&#xff1a;192.168.112.133 开放端口 根据开放的端口信息决定从80web端口入手 目录信息 在images和upload路径存在目录遍历&#xff0c;config.php被渲染无法查看&#xff0c;upload.php需…

C++实现文本界面英语词典

C实现文本界面英语词典 C实现文本界面的英语词典&#xff0c;能在Dev-C运行。提供两种方案&#xff1a;一是简单仅查词功能&#xff1b;二是具有查词、添加、删除功能&#xff0c;具有选择菜单&#xff0c;值得一提的是&#xff0c;本程序对用户输入菜单选项序号做了检测&#…

Zabbix“专家坐诊”第183期问答汇总

问题一 Q&#xff1a;老师&#xff0c;请问一下zabbix采集的数据怎么过滤&#xff0c;获取数据是nottime20:30 notafter3&#xff0c;怎么过滤出netafter3 &#xff1f;谢谢。 A&#xff1a;过滤器设置如下图。 问题二 Q&#xff1a;大佬&#xff0c;请问一下被管节点部署了…

视觉Slam十四讲笔记

视觉SLAM十四讲 ch1~2 虚拟机部分指令解析在其他文件中进行引用该库编译器参考链接&#xff1a;虚拟机部分 CMakeList.txt文件是cmake用来生成Makefile文件需要的一个描述编译链接的规则文件 指令解析 &#xff08;1&#xff09;PROJECT(projectname [CXX] [C] [Java]): 该…

力扣(LeetCode)427. 建立四叉树(2023.03.01)

给你一个 n * n 矩阵 grid &#xff0c;矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。 你需要返回能表示矩阵的 四叉树 的根结点。 注意&#xff0c;当 isLeaf 为 False 时&#xff0c;你可以把 True 或者 False 赋值给节点&#xff0c;两种值都会被判题机制 接受…

Elasticsearch进阶之(核心概念、系统架构、路由计算、倒排索引、分词、Kibana)

Elasticsearch进阶之&#xff08;核心概念、系统架构、路由计算、倒排索引、分词、Kibana&#xff09; 1、核心概念&#xff1a; 1.1、索引&#xff08;Index&#xff09; 一个索引就是一个拥有几分相似特征的文档的集合。比如说&#xff0c;你可以有一个客户数据的索引&…

能源消耗监测管理系统,在建筑节能中起到哪些重要作用?

能源是一切活动的基础更是社会经济发展的命脉&#xff0c;但随着经济的建设&#xff0c;能源资源的消耗也越来越大&#xff0c;其中建筑是最大的消耗者。水、电、气等能源的消耗量逐年增长&#xff0c;这种能源并不是取之不尽用之不竭的&#xff0c;能源的日益紧张和环境恶化&a…

IM即时通讯开发MQ消息队列

消息是互联网信息的一种表现形式&#xff0c;是人利用计算机进行信息传递的有效载体&#xff0c;比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一。 消息从发送者到接收者的典型传递方式有两种&#xff1a; 1&#xff09;一种我们可以称为即时消息&#xff1a…

【FATE联邦学习】Fateboard的使用

fateboard文档 https://fate.fedai.org/fateboard/ github Fateboard文档 https://github.com/FederatedAI/FATE-Board/blob/master/README-CN.md 背景 Fateboard是FATE框架的任务看板。 在配置FATE时&#xff0c;Fateboard一般是被安装好了的&#xff0c;安装过程查看这里 A…

你知道如何获取全国省市街道区域信息吗?

随着互联网和快递行业的飞速发展&#xff0c;在中国广袤的大地上&#xff0c;全国行政区域规划星罗棋布&#xff0c;要查询一个行政单元如果不运用科技的手段查询可是非常的不易&#xff0c;现在&#xff0c;全国行政区划查询API的作用越来越大&#xff0c;它可以帮助我们对地址…

比特数据结构与算法(第四章_下)二叉树OJ(力扣:144,965,104,226,100,572)

144. 二叉树的前序遍历难度简单给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。示例 1&#xff1a;输入&#xff1a;root [1,null,2,3]输出&#xff1a;[1,2,3]示例 2&#xff1a;输入&#xff1a;root [ ]输出&#xff1a;[ ]示例 3&#xff1a;输入&#…