G2. Teleporters (Hard Version)(二分)

news2024/9/22 1:43:21

Problem - 1791G2 - Codeforces

这道题给定一个数轴上的点 0,1,...,n+1,其中每个点 i (1 ≤ i ≤ n) 都有一个传送门。在第 i 个点,你可以进行以下操作:

向左移动一格:花费 1 个金币。
向右移动一格:花费 1 个金币。
使用该位置 i 上的传送门(如果存在):花费 ai 个金币。使用传送门后,你可以选择传送到点 0 或点 n+1。一旦使用了某个传送门,就无法再次使用它。

你有 c 个金币,一开始位于点 0。问你最多可以使用多少个传送门。

输入格式: 第一行一个整数 t(1≤t≤1000),表示测试用例个数。 接下来 t 行,每行两个整数 n、c(1≤n≤2⋅105;1≤c≤109),表示数组长度和可用金币数。 接下来一行 n 个整数 a1,a2,…,an(1≤ai≤109),表示传送门使用所需金币数。

输出格式: 对于每个测试用例,输出你最多可以使用的传送门数量。

Example

Input

Copy

 

10

5 6

1 1 1 1 1

8 32

100 52 13 6 9 4 100 35

1 1

5

4 5

4 3 2 1

5 9

2 3 1 4 1

5 8

2 3 1 4 1

4 3

2 3 4 1

4 9

5 4 3 3

2 14

7 5

5 600000000

500000000 400000000 300000000 200000000 100000000

Output

Copy

2
3
0
1
3
2
1
1
2
2

在第一个测试用例中,您可以向右移动一个单位,使用索引为1的传送门,并传送到点n + 1,向左移动一个单位并使用索引为5的传送门。您剩下6-1-1-1-1 = 2个硬币,无论您传送到哪里,都没有足够的硬币使用另一个传送门。您已经使用了两个传送门,因此答案是2。

在第二个测试用例中,您向右移动四个单位并使用传送门前往n + 1,然后向左移动三个单位并使用索引为6的传送门前往n + 1,最后向左移动四次并使用传送门。总费用将是4+6+3+4+4+9 = 30,并且您使用了三个传送门。

在第三个测试用例中,您没有足够的硬币使用任何传送门,因此答案为零。

题解:
每个位置对答案的贡献最小是min(b[i] + i,b[i] + n - i + 1)

对其排序,f数组记录之前i现在所在位置,并记录前缀和

但是由于开始一定是从0开始的,

所以我们枚举一定会从0 ~ i使用传送门

如果可以在i位置传送,减去b[i] + i

然后看剩下的c,二分前缀和,记录位置pos

如果当前f[i] <= pos,说明有位置被重复计算了,c + min(b[i] + i,b[i] + n - i + 1),重新二分

否则答案取max(ans,pos + 1)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
 #define int long long
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 5e5 + 10;
int mod = 998244353;
struct node
{
	int x,id;
}a[N];
bool cmp(node a,node b)
{
	return a.x < b.x;
}
int f[N];
int b[N];
int pre[N];
int n,c;
int cal(int w)
{
	int l = 0,r = n;
	while(l <= r)
	{
		int mid = (l + r)/2;
		if(pre[mid] > w)
		{
			r = mid - 1;
		}
		else
		{
			l = mid + 1;
		}
	}
	return l - 1;
}
void solve()
{
	cin >> n >> c;
	for(int i = 1;i <= n;i++)
	{
		int x;
		cin >> x;
		b[i] = x;
		a[i].x = min(x + i,x + n - i + 1);
		a[i].id = i;
 	}
 	sort(a + 1,a + 1 + n,cmp);
 	for(int i = 1;i <= n;i++)
 	{
	 	f[a[i].id] = i;
	 	pre[i] = pre[i - 1] + a[i].x;
	}
	int ans = 0;
	for(int i = 1;i <= n;i++)
	{
		int now = c;
		if(b[i] + i > now)
		continue;
		now -= b[i] + i;
		int pos = cal(now);
		if(f[i] <= pos)
		{
			now += min(b[i] + i,b[i] + n - i + 1);
			ans = max(ans,cal(now));
		}
		else
		{
			ans = max(ans,pos + 1);
		}
	}
	cout << ans <<"\n";
}

signed main()
{
	ios::sync_with_stdio(0 );
	cin.tie(0);cout.tie(0);
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

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

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

相关文章

同时配置cuda11.0和11.1环境

同时配置cuda11.0和11.1环境 背景思路流程电脑环境确认确认位置安装新CUDA环境1、执行cuda.exe2. 配置环境变量 安装cudnn 背景 【在电脑上安装多个版本的cuda】&#xff1a;电脑已经安装好了cuda11.0&#xff0c;由于mmdetection版本不匹配&#xff0c;所以想要再安装cuda11.…

【Java】 Java 中函数式接口的使用

本文仅供学习参考&#xff01; 相关教程地址&#xff1a; https://www.runoob.com/java/java8-functional-interfaces.html https://www.cnblogs.com/dgwblog/p/11739500.html https://www.developer.com/java/java-functional-interfaces/ 接口是定义一组方法及其签名的契约。…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第五章 密码学基础上)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、密码学概述1、密码学的历史2、密码学的基本术语 二、密码学基本概念1、基本概念2、密码系统的安全性3、密码体制的分类4、密码体制的攻击 三、古典密码学四、对称密码算法…

Debezium系列之:监控 Debezium 实例

Debezium系列之&#xff1a;监控 Debezium 实例 一、概述二、实现步骤三、执行四、打开Grafana UI五、关闭集群 Debezium JMX相关的技术博客&#xff1a; Debezium系列之&#xff1a;安装jmx导出器监控debezium指标Debezium系列之&#xff1a;为Debezium集群JMX页面增加监控&a…

UE4/5动画系列(4.足部ik制作)

目录 前期准备 添加虚拟骨骼 ​编辑 腿部函数&#xff1a; 前肢&#xff1a; ​编辑 盆骨函数&#xff1a; 后肢&#xff1a; 进入动画图表&#xff1a; 前期准备 首先准备一个后期处理动画蓝图 然后【因为笔者之前的大象因为不知明原因崩溃&#xff0c;这里就不展示如何…

蓝桥杯专题-试题版-【圆的面积】【字符串对比】【字母图形】【核桃的数量】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

如何用机器学习做淘宝用户画像分析?

用户画像&#xff0c;即用户信息标签化&#xff0c;就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后&#xff0c;完美抽象出一个用户的商业全貌是企业应用大数据技术的基本方式。 用户画像为企业提供了足够的信息基础&#xff0c;能够帮助企业…

ChatGPT最新版带来的多功能批量写作工具激发您的创作

随着人工智能的不断发展&#xff0c;ChatGPT最新版作为一款多功能批量写作工具&#xff0c;为创作者们带来了前所未有的创作体验。它能够通过自然语言处理和机器学习技术&#xff0c;生成高质量的文章、故事、对话等内容&#xff0c;为创作者们提供了无限的创作灵感和可能性。本…

MFC 用Stream读取资源里PNG资源 告别exe文件需要资源跟着

在资源视图里添加资源 导入PNG资源 会自动新建一个PNG的文件夹 这时候 PNG就已经在资源里了 但是CImage只能通过路径或者流的方式来加载 不能根据ID值 我们就自己写个方法 声明 bool LoadImageFromResource(IN CImage * pImage, IN UINT nResID, IN LPCSTR lpTyp);实现 bo…

蓝桥杯专题-试题版-【数列排序】【数列特征】【特殊的数字】【特殊回文数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Unity 桌面精灵+鼠标穿透

透明功能shader: Shader "Custom/MakeTransparent" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_TransparentColorKey ("Transparent Color Key", Color) = (0,1,0,1)_TransparencyMargin ("Transparency Margin&qu…

Spring Boot中的@GetMapping注解,如何使用

Spring Boot中的GetMapping注解 介绍 Spring Boot是一个流行的Java框架&#xff0c;它提供了许多方便的注解和工具&#xff0c;使得Web应用程序的开发变得更加容易。其中&#xff0c;GetMapping注解是Spring Boot中最常用的注解之一&#xff0c;它可以帮助开发者定义和处理HT…

C# 多张图片合成一张PDF

我是将每张图片转为byte[]&#xff0c;再将所有的字节数组转为byte[][]&#xff0c;然后对byte[][]进行的处理&#xff0c;大家有其他格式的图片要进行处理的可以先转为上述数据格式。 语种&#xff1a;C# 用到的第三方库&#xff1a;PdfSharp.dll(可直接使用PDFsharp包)&…

C++11右值引用

目录 概念左值和右值左值引用和右值引用 使用左值引用右值引用和移动语义 完美转发万能引用完美转发 概念 左值和右值 左值 左值是一个可以被取地址、修改的对象或变量&#xff0c;其具有固定的内存地址。 左值可以出现在赋值语句的左边&#xff0c;因为它们表示一个可被修…

rabbitmq安装步骤和遇到的问题

一、安装准备工具 1.下载Eralng&#xff0c;下面链接已提供otp_win64_20.2.exe 链接&#xff1a; https://pan.baidu.com/s/1lmvCMPVAV1Ba9UogCdQpZg 提取码&#xff1a;x9m7 2.下载rabbitmq&#xff0c;下面链接已提供rabbitmq-server-3.7.4.exe 链接&#xff1a; https:…

CentOS安装supervisor管理rocketmq进程

一、supervisor 介绍 Supervisor 翻译过来是监管人&#xff0c;在 Linux 中 Supervisor 是一个进程管理工具&#xff0c;当进程中断的时候 Supervisor 能自动重新启动它。可以运行在各种类 Linux/unix 的机器上&#xff0c;supervisor 就是用 Python 开发的一套通用的进程管理程…

【Qt】随记2:CV_Assert的用法

欢迎阅读本博文&#xff0c;本文主要记录Qt学习、工作中的一些注意点及相关笔记&#x1f4c3; 希望记录的内容有帮助到你&#xff0c;也欢迎把你知道的分享给大家&#xff0c;一起进步&#xff01;&#x1f389; 喜欢的话&#xff0c;请帮忙点赞&#x1f44d;、评论&#x1f4…

STM32开发指南:逐步揭开嵌入式世界的奥秘

想要深入嵌入式开发领域&#xff1f;掌握STM32这本"天书"&#xff1f;也许你觉得它难以捉摸&#xff0c;但是别担心&#xff01;我们为你准备了一份简洁明了的指南&#xff0c;将带你逐步解读STM32的奥秘。 首先&#xff0c;我们将介绍STM32的基础知识。从了解STM32…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第六章 身份认证与访问控制)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、身份认证1、身份认证概述2、身份认证常用技术3、常用身份认证机制 二、访问控制1、访问控制概述2、访问控制基本要素 三、访问控制类型四、访问控制机制 一、自学网络安全…

git 常见错误解决

一、git命令运行时出现以下错误提示&#xff1a; git add -A fatal: detected dubious ownership in repository at D:/****/WWW/www.***.cc D:/**/WWW/www.**.cc is owned by:S-1-5-32-544 but the current user is:S-1-5-21-4097290046-3821524887-*****-1001 To add an exce…