生产调度

题目描述

输入格式

第一行仅1个整数n,表示产品的数量。 接下来一行n个整数是表示这n个产品在 A 车间加工各自所要的时间。 最后的n个整数是表示这n个产品在 B 车间加工各自所要的时间。

#include <bits/stdc++.h>

#define int long long

using namespace std;

typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f3f3f3f3f;
const int MAXN = 2e5 + 5;

struct node {
    int a,b,id,d;
    bool operator<(node x)const {
        if(d==x.d) {
            if(d<=0)
                return a<x.a;
            else
                return b>x.b;
        }
        return d<x.d;
//        return min(a,x.b)<min(b,x.a);
    }
};
node nodes[MAXN];

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t, n, m;
    cin >> t;
    for(int i=0; i<t; i++) {
        cin>>nodes[i].a;
        nodes[i].id=i+1;

    }
    for(int i=0;i<t;i++){
        cin>>nodes[i].b;
        nodes[i].d=(nodes[i].a-nodes[i].b);
        if(nodes[i].d>0) {
            nodes[i].d=1;
        } else if(nodes[i].d<0)
        nodes[i].d=-1;
    }

    stable_sort(nodes,nodes+t);
    int time1=0,time2=0;
    for(int i=0; i<t; i++) {
        time1+=nodes[i].a;
        time2=((time2<time1)?(time1):(time2));
        time2+=nodes[i].b;

    }
    cout<<time2<<'\n';
    for(int i=0;i<t;i++)cout<<nodes[i].id<<' ';
}

最后更新于