HDU 1896 Stones

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896

学了下优先队列:

#include <iostream>
#include <queue>
#define MAX(a,b) ((a) > (b) ? (a) : (b)) 
using namespace std;


struct node
{
	int pi;
	int di;
	friend bool operator<(node n1,node n2)
	{
		if(n1.pi!=n2.pi)	
			return n2.pi<n1.pi;
		return n2.di<n1.di;
	}
};



int main()
{
	int T;
	node tem,next;
	int num;
	int i;
	int n;
	int ans;


	scanf("%d",&T);
	while(T--)
	{
		priority_queue<node>q;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		{
			scanf("%d%d",&tem.pi,&tem.di);
			q.push(tem);
		}


		num=0;
		ans=0;
		while(!q.empty())
		{
			num++;
			tem=q.top();
			q.pop();

			ans=MAX(ans,tem.pi);
			if(!(num%2))	
				continue;


			next.pi=tem.pi+tem.di;
			next.di=tem.di;
			q.push(next);
		}


		printf("%d
",ans);
	}
	return 0;
}


 

原文地址:https://www.cnblogs.com/frankM/p/4399538.html