玄关求调教
查看原帖
玄关求调教
398155
某kob在此楼主2024/11/28 14:49

马蜂良好但是显示第一行太短

#include<bits/stdc++.h>
using namespace std;

struct Print{
    int id, t;
    bool operator <(const Print x)const{
        if (t == x.t)   return id > x.id;
        return t > x.t;
    }
};
struct Text{
    int start, time, id;
}txt[200005];
bool cmp(Text a, Text b){
    return a.start < b.start;
}

int n, m;
vector<int> d[200005];
priority_queue<Print> p1, p2;

int main(){
    cin >> n >> m;
    for (int i = 1; i <= m; i ++){
        Print kk; kk.id = i, kk.t = 0;
        p1.push(kk);
    }

    for (int i = 1; i <= n; i ++){
        scanf("%d%d", &txt[i].time, &txt[i].start);
        txt[i].id = i;
    }
    sort(txt + 1, txt + n + 1, cmp);

    for (int i = 1; i <= n; i ++){
        while (!p2.empty() && p2.top().t <= txt[i].start){
            Print kk = p2.top();kk.t = 0;
            p1.push(kk);
            p2.pop();
        }
        if (p1.empty()){
            p1.push(p2.top());
            p2.pop();
        }
        
        Print kk = p1.top(); p1.pop();
        d[kk.id].push_back(txt[i].id);
        kk.t = max(kk.t, txt[i].start) + txt[i].time;
        // printf("%d用的%d号打印机,结束时间为%d\n", txt[i].id, kk.id, kk.t);
        p2.push(kk);
    }
    // while (!p2.empty()){
    //     cout << p2.top().id << " ";
    //     p2.pop();
    // }
    cout << endl;
    for (int i = 1; i <= m; i ++){
        printf("%d ", d[i].size());
        sort(d[i].begin(), d[i].end());
        for (int j = 0; j < d[i].size(); j ++)  printf("%d ", d[i][j]);
        printf("\n");
    }

    return 0;
}
2024/11/28 14:49
加载中...