标签:
Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1363    Accepted Submission(s): 850
题意:每行的两个数据pi和Di分别代表石头所在的位置和所能扔出的距离,当石头是第奇数个是向外扔
当是第偶数个时绕过去,(之前扔过来的石头也参与运算)直至没有石头可扔 求出起点0到终点
的距离:
AC代码:
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
    int stone;
	int dis;
	friend bool operator< (node a,node b)
	{
		if(a.stone==b.stone)
		return a.dis>b.dis;
		else
		return a.stone>b.stone;
	}	
};
int main()
{
	int n,m,j,i,t;
	scanf("%d",&t);
	while(t--)
	{
		priority_queue<node>q;
		node x,x1;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		{
			int p,d;
			scanf("%d%d",&p,&d);
			x.stone=p;
			x.dis=d;
			q.push(x);
		}
		int ans=0;//判断是第奇数还是第偶数个石头 
		int sum;//记录总距离 
		while(!q.empty())
		{
			ans++;
			x=q.top();
			sum=x.stone;
			if(ans&1)//如果是第奇数个石头则扔出去删除队首元素并
			{       //将扔出去后的石头的 坐标 及可以扔出的距离入队 
				x1.stone=x.stone+x.dis;
				x1.dis=x.dis;
				q.pop();
				q.push(x1);
			}
			else//第偶数个石头则直接删除队首元素 
			{
				q.pop();
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4682350.html