soj 1778. Dull Game

本文介绍了一个使用优先队列解决的游戏策略问题。通过模拟游戏过程,每轮玩家放置若干不同权重的球,对手则取出最重的球。最终确定盒中剩余最重球的信息。文章详细展示了如何自定义结构体并实现比较运算符来确保正确性。

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

题意:

XX和YY玩一个游戏,有N轮。

每一轮执行操作:

  XX在盒子里面放入ai个球(编号num,重量wgt)

  YY从盒子里面取出bi个最重的球

问最后盒子里面最重的球的编号和重量

已经确定球的编号两两各不相同,球的重量两两各不相同

思路:

优先队列。

注意的地方:

自己定义的结构体用优先队列的时候需要重载大于号和小于号(指的是优先级的大小关系),注意两个const 必须加。

代码:

#include <cstdio>
#include <queue>
using namespace std;

struct Ball
{
	int n, w;
	Ball() {}
	Ball(int _n, int _w): n(_n), w(_w) {}
	bool operator > (const Ball &b) const { return w > b.w; }
	bool operator < (const Ball &b) const { return w < b.w; }
};
int t, n, ai, bi, num, wgt;
Ball ans;
int main()
{
	scanf("%d", &t);
	while (t --)
	{
		priority_queue <Ball> Q;
		scanf("%d", &n);
		while (n --)
		{
			scanf("%d %d", &ai, &bi);
			while (ai --)
			{
				scanf("%d %d", &num, &wgt);
				Q.push(Ball(num, wgt));
			}
			while (bi --) Q.pop();
		}
		ans = Q.top();
		printf("%d %d\n", ans.n, ans.w);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值