HDU - 1896 Stone重载的优先队列

本文介绍了一个基于石头位置和可投掷距离的游戏问题解决方案,利用C++中的重载<运算符和优先队列实现,详细解释了如何通过自定义比较规则来确保石头按特定顺序处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为自行车的位置不对,塞姆普开始每天早上从东到西步行,每天晚上步行回来。散步会引起疲劳,所以这次塞姆普总是在路上玩一些游戏。
路上有很多石头,当他遇到一块石头时,如果碰到的是第奇数个的石头,他会尽可能地把它扔到前面;如果碰到的是第偶数个的石头,他会把它留在原处。现在给您一些关于路上石头的信息,您要告诉我从起点到塞姆普路过的最远石头的距离。请注意,如果两个或更多的石头停留在同一位置,您将首先遇到较大的(具有最小Di的,如输入中所述)。
Input
在第一行中,有一个整数T(1<=T<=10),它表示输入文件中的测试用例。
然后是T个测试用例。对于每个测试用例,我将在第一行中给出整数N (0<=N<=100000),这意味着路上的石头数量。然后是N行,行中有两个整数Pi(0<=Pi<=100000)和Di(0<=Di<=1000),这意味着第i个石头的位置以及塞姆普可以把它扔多远。
Output
个测试用例输出一行,如描述所述。
Sample Input
2
2
1 5
2 4
2
1 5
6 6
Sample Output
11
12
这个题需要用到重载"<",这是我的薄弱点,写下来记录一下。
在这个重载的优先队列里,将优先级设置为当坐标一样的时候,将di按从大到小排序,注意"<"表示的是从小到大,否则,坐标大 的石头优先度高。

#include<cstdio>
#include<queue>
using namespace std;
struct stone
{
	int pi;
	int di;
	friend bool operator<(const stone &a,const stone &b)
	{
		if (a.pi==b.pi)//这里的重载很重要,坐标相同时,以di小的优先
			return a.di>b.di;
		else 
		return a.pi>b.pi;
	}
};
int main(void)
{
	int T;
	while(scanf("%d",&T)!=EOF)
	{
		while(T--)
		{
			int N;
			scanf("%d",&N);
			priority_queue<stone> ss;
			stone k;
			while(N--)
			{
				scanf("%d",&k.pi);
				scanf("%d",&k.di);
				ss.push(k);
			}
			int flag=1;//判断当前遇到的是偶数石头还是奇数石头
			int fast;
			while(ss.empty()!=true)
			{
				if (flag%2!=0)
				{
					stone p=ss.top();
					ss.pop();
					p.pi+=p.di;
					ss.push(p);
					flag++;
				}
				else 
				{
					stone k=ss.top();
					ss.pop();
					if (ss.empty()==true)
					fast=k.pi;
					flag++;
			}
		}	
		printf("%d\n",fast);
	}
}
	return 0;
}
内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值