Stones(优先队列)

来源:互联网 发布:淘宝淘积木 编辑:程序博客网 时间:2024/06/07 06:08


原题

题意:奇数石头扔出去, 偶数石头忽略,相同位置的石头,先选择沉的,即能扔的距离比较近的。直到忽略最后一个为止,看一共走了多远。

思路:建一个优先队列,装进所有的元素,偶数石头pop掉,直到队列为空为止。

#include<iostream>#include<queue>using namespace std;#define max 100000struct stone{int pos, dis;bool operator < (const stone &a) const{if(pos==a.pos)//先比较位置,位置一样比较距离。return dis>a.dis;return pos>a.pos;}};struct stone a[max], b;int main(){priority_queue<stone> q;int T, n;cin>>T;while(T--){int cnt=0, maxDis=0;cin>>n;for(int i=1; i<=n; i++){cin>>a[i].pos>>a[i].dis;q.push(a[i]);}while(!q.empty()){maxDis=q.top().pos;if(++cnt % 2 ==0)q.pop();else {b=q.top();//奇数时,一定要先取出来,编辑完再放进去。q.pop();b.pos+=b.dis;q.push(b);}}cout<<maxDis<<endl;} return 0;}

本人语拙,不懂地方,尽请留言,如有不足,不吝赐教。


原创粉丝点击