有人可以来救救我吗(小声)
查看原帖
有人可以来救救我吗(小声)
292300
Kobe303楼主2021/7/5 13:21

我是真的不知道问题出在哪

只有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
*/
2021/7/5 13:21
加载中...