Skip to content

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;
}