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