标签:
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