题目传送门
解题思路:
一道没啥思维含量的模拟题,但是个人感觉代码实现不简单,可能是我太弱了,花了我6个小时,3次重写.
AC代码:
1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 #include<cstdio> 5 6 using namespace std; 7 8 struct kkk { 9 int id,st,re,pr; 10 bool operator < (const kkk &a) const { 11 if(pr == a.pr) return st > a.st; 12 else return pr < a.pr; 13 } 14 }; 15 kkk c; 16 long long ti; 17 priority_queue<kkk> q; 18 19 int main() { 20 while(scanf("%d%d%d%d",&c.id,&c.st,&c.re,&c.pr) != EOF) { 21 while(!q.empty() && ti + q.top().re <= c.st) { 22 kkk b = q.top(); 23 q.pop(); 24 printf("%d %lld ",b.id,ti + b.re); 25 ti += b.re; 26 } 27 if(!q.empty()) { 28 kkk d = q.top(); 29 q.pop(); 30 d.re = d.re - c.st + ti; 31 q.push(d); 32 } 33 q.push(c); 34 ti = c.st; 35 } 36 while(!q.empty()) { 37 kkk f = q.top(); 38 q.pop(); 39 ti += f.re; 40 printf("%d %lld ",f.id,ti); 41 } 42 43 return 0; 44 }