G. Good Key, Bad Key(暴力)

news2024/11/19 3:45:16

Problem - 1703G - Codeforces

有n个箱子。第i个箱子里有ai个硬币。你需要按顺序打开所有n个箱子,从箱子1到箱子n。

你可以用两种类型的钥匙来打开箱子。

一把好钥匙,使用它需要花费k个硬币。
坏钥匙,不需要花费任何金币,但会将每个未打开的箱子里的所有金币减半,包括它要打开的箱子。减半的操作将使每个被减半的箱子减至最接近的整数。换句话说,用一把坏钥匙打开i号箱子会做ai=⌊ai2⌋,ai+1=⌊ai+12⌋,...,an=⌊an2⌋。
任何钥匙(包括好的和坏的)在使用后都会断掉,也就是说,它是一次性的使用。
你总共需要使用n把钥匙,每个箱子一把。最初,你没有金币,也没有钥匙。如果你想使用一把好钥匙,那么你需要购买它。

在这个过程中,你可以负债;例如,如果你有1个硬币,你可以购买一把价值k=3个硬币的好钥匙,你的余额将变成-2个硬币。

请找出从1号箱子到n号箱子的顺序打开所有n个箱子后,你能拥有的最大数量的硬币。

输入
第一行包含一个整数t(1≤t≤104)--测试案例的数量。

每个测试案例的第一行包含两个整数n和k(1≤n≤105;0≤k≤109)--分别为箱子的数量和一把好钥匙的成本。

每个测试案例的第二行包含n个整数ai(0≤ai≤109)--每个箱子里的硬币数量。

所有测试案例的n之和不超过105。

输出
对于每个测试案例,输出一个单一的整数--按照从箱子1到箱子n的顺序打开箱子后所能获得的最大硬币数。

请注意,有些测试案例的答案不适合32位整数类型,所以你应该在你的编程语言中至少使用64位整数类型(如C++的long long)。

例子
inputCopy
5
4 5
10 10 3 1
1 2
1
3 12
10 10 29
12 51
5 74 89 45 18 69 67 67 11 96 23 59
2 57
85 60
输出拷贝
11
0
13
60
58
备注
在第一个测试案例中,一个可能的策略是如下的。

用5个金币购买一把好钥匙,然后打开1号箱子,得到10个金币。你目前的余额是0+10-5=5个硬币。
用5个硬币买一把好钥匙,然后打开箱子2,得到10个硬币。你目前的余额是5+10-5=10个硬币。
用一把坏钥匙打开3号箱子,由于使用了坏钥匙,3号箱子的硬币数变成⌊32⌋=1,4号箱子的硬币数变成⌊12⌋=0,你现在的余额是10+1=11。
使用一把坏钥匙,打开4号箱子。由于使用了一把坏钥匙,4号箱子里的硬币数量变成了⌊02⌋=0,你现在的余额是11+0=11。
在这个过程结束时,你有11个硬币,这可以证明是最大的。

题解:

根据每次用坏钥匙,当前位及后面所有宝箱金币数均减半(代表后面不会再用好钥匙了,因为除了2,比起以前再用好钥匙会更小)

再结合数据范围1e9,顶多32次后,i + 32后的宝箱就全为0了

那么我们直接暴力枚举再0~n位,每个i后顶多32次就结束了,是可行的

 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define int long long
//1 1 3 3 3
int a[300050];
int s[300050];
int b[300050];
void solve()
{
	int n,k;
	cin >> n >> k;
	for(int i =  1;i <= n;i++)
	cin >> a[i];
	int s = 0;
	int ans = 0;
	for(int i = 0;i < n;i++)
	{
		int ss = s;
		for(int j = i+1;j <= min(n,i+32);j++)
		{
			int cnt = a[j];
			cnt >>=j - i;
			ss += cnt;
		}
		ans = max(ss,ans);
		s += a[i+1] - k;
	}
	ans = max(ans,s);
	cout<<ans<<"\n";
	
	
}
signed main()
{
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve();
	}
}
//2 5
//3
//9 7 


//2  3 4 3

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

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

相关文章

操作系统:进程的创建(fork函数)、进程的替换(exec函数)

文章目录1.进程的创建2.进程的替换3.进程的阻塞1.进程的创建 ①调用fork函数的进程为父进程&#xff0c;调用后生成一个子进程&#xff1b; ②创建子进程成功时&#xff0c;父进程中fork函数的返回值是子进程的进程号PID&#xff1b; ③创建子进程失败时&#xff0c;父进程中fo…

使用.NET简单实现一个Redis的高性能克隆版(一)

正文 我遇到了这个项目&#xff0c;它的目标是成为一个比Redis有着更好性能和更易用的克隆版。我发现它很有趣&#xff0c;因为它主要的卖点之一就是它是在多线程模式下运行&#xff08;而不是像Redis那样是单线程&#xff09;。他们使用memtier_benchmark&#xff08;Redis项…

shell命令以及运行原理

shell命令以及运行原理shell命令以及运行原理shell命令以及运行原理 Linux严格意义上来说说的是操作系统&#xff0c;我们把操作系统称之为“内核”&#xff08;kernel&#xff09;&#xff0c;但是我们用户是不会直接与kernel直接打交道的&#xff0c;我们是通过一个“外壳程…

D. Fixed Point Guessing(二分+交互式问题)

Problem - D - Codeforces 这是一个互动问题。 最初&#xff0c;有一个数组a[1,2,...,n]&#xff0c;其中n是一个奇数正整数。陪审团选择了n-12对不相干的元素&#xff0c;然后对这些元素进行交换。例如&#xff0c;如果a[1,2,3,4,5]&#xff0c;对1↔4和3↔5进行互换&#xf…

吐血经验,怎么把OAK相机的镜头模组拆下来?

消息快播&#xff1a;OpenCV众筹了一款ROS2机器人rae&#xff0c;开源、功能强、上手简单。来瞅瞅~ 编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查…

[AI] LRTA*(K) 搜索算法

LRTA*[k]搜索算法 一、理论二、实际应用步骤一、理论 LRTA*(K) 是LRTA* 算法的进阶版&#xff0c;关于LRTA*的回顾请点此处&#xff0c; LRTA*(K) 论文请点此处 该文作者把LRTA算法归为 无界传播(unbounded propagation, 中文用谷歌翻译的。。。囧)&#xff0c;LRTA(K)归为有…

第四章:JVM运行时参数

一、JVM参数选项类型类型一&#xff1a;标准参数选项类型二&#xff1a;-X参数选项类型三&#xff1a; -XX参数选项二、常用的 JVM 参数选项打印设置的 XX 选项及值堆、栈、方法区的参数栈堆方法区垃圾回收器相关参数Serial回收器ParNew 回收器ParallelGcCMS回收器G1 回收器如何…

Win11杜比全景声无法正常运行的解决方法教学

Win11杜比全景声无法正常运行的解决方法教学。我们的电脑开启杜比声全景音效之后&#xff0c;无论是看电影&#xff0c;还是听音乐&#xff0c;都可以获得更加良好的视听体验。但是有用户却遇到了电脑无法正常的开启杜比声音效的问题&#xff0c;一起来看看如何去解决的方法吧。…

【Selenium】Selenium4 Grid

Selenium Grid: 将客户端发送的命令转发到远程浏览器上执行 WebDriver 脚本。 简介 Selenium Grid 是由一个 hub 服务和若干个 node 代理节点组成。 Hub 调度服务&#xff0c;管理各个代理节点的注册信息和状态信息&#xff0c;并且接收来自客户端代码的调用请求&#xff0c;…

13.练习题(年月日,打字游戏)

练习 1.任意给出一个年、月、日&#xff0c;判断是这一年的第几天&#xff1a;闰年算法&#xff1a;能被4整除且不能被100整除&#xff0c;或者能被400整除。 如&#xff1a;2012 5 10 是这一年的第131天。 提示&#xff1a;使用数组的方式计算&#xff0c;将每月的天数放在一…

面试学习总结

之前根据视频做的总结&#xff0c;备个份。 一、Volatile关键字 volatile是Java虚拟机提供的轻量级的同步机制。 三个特性&#xff1a; 保证可见性 线程修改了工作内存中的值并写回到主内存之后&#xff0c;主内存立刻通知所有线程。称为可见性。&#xff08;结合JMM理解&am…

蓝桥杯刷题(三)

蓝桥杯刷题一.等差素数列&#xff08;较难&#xff09;二.货物摆放&#xff08;思路新奇&#xff09;三.既约分数四.跳跃五.数值求值&#xff08;坑题&#xff09;蓝桥杯题库一.等差素数列&#xff08;较难&#xff09; 这道题有公式&#xff0c;其等差就是它长度内所有素数的乘…

Seata安装并注册集成到Nacos服务上

目录 一.工具地址与版本 二.解压与配置 三.创建数据库&#xff0c;执行脚本 四.启动与调试 五.seata高可用 六.查看启动情况 一.工具地址与版本 1.nacos-server-2.0.3 下载地址&#xff1a;Releases alibaba/nacos GitHub 2.seata-server-1.4.2 下载地址&#xff1…

小侃设计模式(十四)-职责链模式

1.概述 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是为请求创建了一个接收者对象的链&#xff0c;让请求沿着这条链进行传播&#xff0c;直到有对象处理它为止&#xff0c;它属于典型的行为型模式。这种方式降低了发送者和处理者之间的耦合关系&…

HTML+CSS简单的网页制作期末作业 关于我的家乡——四川文化网页介绍 DW大学生网页作业制作设计 Dreamweaver简单网页成品

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

chapter1——亚稳态的世界

目录1.亚稳态理论2.亚稳态窗口3.计算MTBF4.避免亚稳态多级同步器时钟倍频电路的多级同步器5.亚稳态测试电路6.同步器类型7.综合性建议在异步系统中&#xff0c;由于数据和时钟的关系不是固定的&#xff0c;因此有时会出现违反建立和保持时间的现象&#xff0c;此时便会输出介于…

OTA: Optimal Transport Assignment for Object Detection原理与代码解读

paper&#xff1a;OTA: Optimal Transport Assignment for Object Detection code&#xff1a;https://github.com/Megvii-BaseDetection/OTA 背景 标签分配&#xff08;Label Assignment&#xff09;是目标检测中重要的一环&#xff0c;经典的标签分配策略采用预定义的规则…

Type-challehges learning: pick

type-challenges/README.zh-CN.md at main TIMPICKLE/type-challenges GitHub 最近真的是迷上了type-challenges。无法自拔 TS真是太香了&#xff01; 今天手写一个pick 从类型定义的属性中&#xff0c;选取指定一组属性&#xff0c;返回一个新的类型定义。 type Pick<T…

Npm——发布依赖库并使用

1. 注册一个NPM账号 npm官方地址&#xff1a;https://www.npmjs.com/ 2. 在本地创建一个目录,输入npm初始化命令&#xff0c;并修改package.json,创建src/index.js入口文件 npm init --yespackage.json name npm发布时的包名&#xff0c;和已有的npm库不能重复version 包版本…

网络安全——SQL注入之安全狗bypass深度剖析

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…