我是真的不知道问题出在哪
只有10pts
Code:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define reg register
#define il inline
ll nowtime;
struct node
{
int id;
int arrive;
ll time;
int leavl;
ll start;
bool operator<(const node&x) const
{
if(x.leavl != leavl)
return x.leavl > leavl;
else
return x.arrive < arrive;
}
};
vector<node> q;
priority_queue<node> wait;
int n;
int main()
{
int id, arrive, leavl;
ll time;
while(~scanf("%d%d%lld%d", &id, &arrive, &time, &leavl))
q.push_back((node){id, arrive, time, leavl, arrive});
n = q.size();
int i = 0; // 当前处理到哪一个进程
while(i < n)
{
bool f = true; // 判断当前进程是否可以正常结束
int k = i;
for(int j = i + 1; j < n; ++j)
{
if(q[i].start + q[i].time < q[j].arrive)
break;
k = j;
if(q[i].leavl < q[j].leavl) // 老进程滚一边去
{
f = false;
q[i].time -= (q[j].arrive - q[i].start);
q[i].start = q[j].arrive + q[j].time;
break;
}
else //新进程滚一边去
{
wait.push((node){q[j].id, q[j].arrive, q[j].time, q[j].leavl, q[i].start + q[i].time});
}
}
if(!f)
{
wait.push((node){q[i].id, q[i].arrive, q[i].time, q[i].leavl, q[i].start});
i = k;
}
else
{
printf("%d %lld\n", q[i].id, q[i].start + q[i].time);
if(!wait.empty())
{
node u = wait.top(); wait.pop();
if(k == n - 1) q[k].start = q[i].start + q[i].time;
else q[k].start = u.start;
i = k;
q[k].id = u.id, q[k].arrive = u.arrive, q[k].time = u.time, q[k].leavl = u.leavl;
}
else i = k + 1;
}
//printf("%d\n", i);
}
return 0;
}
/*
1 1 1 1
2 3 1 1
3 5 1 1
*/