首页 > 其他分享 >1759E(方案枚举)

1759E(方案枚举)

时间:2022-11-19 13:22:55浏览次数:79  
标签:方案 int 机器人 药剂 long 枚举 1759E hh define

题目链接

题目大意:

给你n个数(n个宇航员对应的能量值) 一个h ,h表示机器人当前的能量值。机器人拥有2中绿色的药剂,一瓶蓝色的药剂。其中绿色的药剂可以使机器人的能量值变为现在的2倍(2->2 * 2 = 4),蓝色的药剂可以使机器人的能量值变为现在的3倍(2 -> 2 * 3 = 6)。机器人每秒可以进行下列中的任意一个操作:

  1. 吸收一个拥有更少人类力量的宇航员(即:a[i] < h ),此时h = h + (a[i] / 2), "/"表示整数运算,向下取整。
  2. 使用绿色药剂(确保他有)
  3. 使用蓝色药剂(确保他有)

问该机器人最多可以吸收几个宇航员的能量值?

解题思路:

机器人要想吸收更多的人,那么他一定会先吸收,直到不能吸收为止,然后使用药剂。但是药剂有3瓶2种,我们该如何去进行选择呢?(哈哈)仔细想想他不就三瓶吗?我直接枚举不就好了,也不过3种可能,最后求最大值就好了。根据贪心原则,他想要吸收更多人的能量,他就要先吸收能量最小的人。这样也可以用一个优先队列维护,当然排序也是可以的。注意:要使用long long,不然会爆int的。

AC代码:

#include<bits/stdc++.h>
#define int long long
#define sz(a) ((int) (a).size())
#define vi vector< int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define PII pair<int, int>
using namespace std;

const int N = 2e5 + 10;
int n, h;
int f[3][3] = {{2, 2, 3}, {2, 3, 2}, {3, 2, 2}}; //枚举方案 
int a[N];
void solved()
{
	cin >> n >> h;
	
	for (int i = 1; i <= n; i ++ )
	{
		cin >> a[i];
	}
	
	int cnt, mx = 0, res;
	
	for (int u = 0; u < 3; u ++ )
	{
		int hh = h;
		cnt = 0;
		res = 0;
		priority_queue<int, vector<int>, greater<int> > q;
		for (int i = 1; i <= n; i ++ ) q.push(a[i]); 
		while (q.size())
		{
			int hhh = q.top();
			q.pop();
			if (hhh < hh) //如果可以吸收直接吸收就好了 
			{
				hh += (hhh / 2);
				res ++;
				continue ;
			}
			
			while (hhh >= hh && cnt < 3) //不能直接吸收,那就用药剂增强自己 
			{
				hh *= f[u][cnt++];
			}
			if (hhh >= hh) break; //增强后也不可以,那就不能吸收了呗 
			hh += (hhh / 2);
			res ++;
		}
		
		mx = max(mx, res);
	}
	
	cout << mx << '\n';

}


signed main(){
	ios :: sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	int t;
	cin >> t;
	while (t -- )
	{
		solved();
	} 
	
	return 0;
}

/* stuff you should look for 你应该寻找的东西
 * int overflow, array bounds (int)溢出,数组边界
 * special cases (n=1?) 特殊情况(n=1?)
 * do smth instead of nothing and stay organized 做一些事情而不是什么也不做,保证效率
 * WRITE STUFF DOWN 将东西写下
 * DON'T GET STUCK ON ONE APPROACH 不要在一个地方死磕
 */

 

标签:方案,int,机器人,药剂,long,枚举,1759E,hh,define
From: https://www.cnblogs.com/msluli/p/16905928.html

相关文章

  • java: 错误: 无效的源发行版:16 - 解决方案
    在使用idea时遇到java:错误:无效的源发行版:16解决方案将语言级别由16改为8即可......
  • 缓存一致性探讨(双删法及其改进方案)
    提到缓存,作为服务端的开发人员并不陌生,无论是本地缓存还是分布式缓存,其目的都是为了提高系统响应速度的同时减轻数据库的查询压力;在缓存开发中有个问题必需要解决,那就......
  • KDE plasma 长时间使用导致卡顿解决方案
    KDEplasma长时间使用导致卡顿解决方案之前使用过一段时间的GNOME,因为自己的机器实在是太烂了,经常卡死、触摸板无响应,只能长按电源键关闭电源之后重启(甚至直接黑屏)。后......
  • 配置实现-解决方案项目介绍
    数据层DAL利用了微软的开源项目GotDotNet.ApplicationBlocks.Data(即ADOHelper),并封装了数据库常用的操作。业务层BAL首先是封装了DAL层数据库的调用(因此要求在WEB层必须调用......
  • Push rejected: Push to origin/master was rejected错误解决方案
    解决方案如下:1.切换到自己项目所在的目录,右键选择GITBASHHere,Idea中可使用Alt+F122.在terminl窗口中依次输入命令:gitpullgitpulloriginmastergitpullorigin......
  • 启明智显 | 高性价比串口屏方案应用于汽车仪表
    在社会经济的迅速发展下,居民拥有汽车的数量逐年增加,各汽车厂商也处于激烈角逐的局面中,其中汽车的人机交互设计成为各个品牌在汽车智能化浪潮的态势下重要的发力点,汽车人机......
  • 气体安全监控解决方案
    气体安全监控解决方案,可燃气体探测、可探测天然气、甲烷、丙烷、一氧化碳、氧气、二氧化硫、氨气、硫化氢主要应用于工业气体、污水排放、垃圾填埋、油气管道、煤矿安全、......
  • 求超大文件上传方案( jsp )
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求     ......
  • 能耗监测管理解决方案
    能耗监测系统是华普物联为积极响应国家发展改革委关于能耗在线监测系统推广建设要求而研发设计,致力于协助重点用能单位信息化转型,加强能源消耗日常调度、提升能源管理精细......
  • 传感器数据采集解决方案
    传感器是数据的源泉,在技术进步和数字化、智能化时代的市场需求推动下,传感器赋予人工智能感知的能力,各种传感器广泛应用于电信、电力、石化、环保、造纸、冶金、食品、医疗......