Pro2
原始文件为 CPP 代码,本文是转换后的 Markdown 文件。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 1005;
const int maxtime = 10505;
vector<int> takelist[maxtime];
vector<int> returnlist[maxtime];
vector<int> totaltime;
bool isempty[maxn];
bool timeactive[maxtime];
int pos[maxn];
int orderlist[maxn];
void init(int n,int k)
{
totaltime.clear();
memset(timeactive,false,sizeof(timeactive));
for (int i = 1; i <= maxn; ++i)
{
takelist[i].clear();
returnlist[i].clear();
}
for (int i = 1; i <= n; ++i)
{
isempty[i] = false;
pos[i] = i;
}
}
int main()
{
int N,K;
scanf("%d%d",&N,&K);
init(N,K);
for (int i = 0; i < K; ++i)
{
int order,from,time;
scanf("%d%d%d",&order,&from,&time);
if (!timeactive[from])
{
totaltime.push_back(from);
timeactive[from] = true;
}
if (!timeactive[from + time])
{
totaltime.push_back(from+time);
timeactive[from+time] = true;
}
takelist[from].push_back(order);
returnlist[from+time].push_back(order);
}
sort(totaltime.begin(),totaltime.end());
int num = totaltime.size();
for (int i = 0; i < num; ++i)
{
int time = totaltime[i];
int returnnum = returnlist[time].size();
sort(returnlist[time].begin(),returnlist[time].end());
for (int k = 0; k < returnnum; ++k)
{
int order = returnlist[time][k];
for (int j = 1; j <= N; ++j)
{
if (isempty[j])
{
pos[order] = j;
isempty[j] = false;
break;
}
}
}
int takenum = takelist[time].size();
sort(takelist[time].begin(),takelist[time].end());
for (int k = 0; k < takenum; ++k)
{
int order = takelist[time][k];
isempty[pos[order]] = true;
}
}
for (int i = 1; i <= N; ++i)
orderlist[pos[i]] = i;
for (int i = 1; i <= N; ++i)
printf("%d ",orderlist[i]);
cout << endl;
return 0;
}