计蒜客 计蒜机(优先队列+思路,没想到)

来源:互联网 发布:米家声波电动牙刷知乎 编辑:程序博客网 时间:2024/06/16 01:19

题目:



题目思路:我们只要把注册的 ID 全部放入堆里面,然后按照时间小优先级高的方式,每次从堆中取走时间最小的 ID。然后把该 ID 的时间增加该 ID 的间隔时间后再次放入堆中,就可以了。

学到的东西:一开始没有想到这一方面,题目的优先级没有分析清楚,思路很重要。

代码:

#include <bits/stdc++.h>using namespace std;struct node{    int num;//注册的号码    int time;//实际的时间    int atime;//开始时的时间    friend bool operator<(node a,node b){//在这里重载<代表b的优先级高        if(a.time>b.time) return true;//b小优先级高        if(a.time==b.time&&a.num>b.num) return true;        return false;//false 不要忘记写    }};int main(){    priority_queue<node>Q;    string s;    node tmp;    while(cin>>s){        if(s[0]=='#') break;        int x,y;cin>>x>>y;        tmp.num=x;        tmp.time=y;        tmp.atime=y;        Q.push(tmp);    }    int k;scanf("%d",&k);    while(k--){        tmp=Q.top();Q.pop();        cout<<tmp.num<<endl;        tmp.time+=tmp.atime;        Q.push(tmp);    }    return 0;}


原创粉丝点击