求调
查看原帖
求调
1582187
yuboyuan2022楼主2025/6/17 14:13
//测试点 #9 #10 TLE,其他WA
//样例运行结果9
//#1测试点运行结果return value 3221225477
#include<bits/stdc++.h>
using namespace std;
int main(){
    const int tmax=10000;//最大时间
    int m,n;
    cin>>m>>n;
    int steps[m*n];//安排顺序
    for(int i=0;i<m*n;i++){
        cin>>steps[i];
        steps[i]--;
    }
    struct process{//步骤(工件号-工序号)
        int piece;
        int step;
    };
    struct machine{//机器
        process work[tmax];
    }mac[m];
    struct workpiece{//工件
        int step;
        int who[20];
        int time[20];
    }piece[n];
    for(int i=0;i<m;i++){
        for(int j=0;j<tmax;j++){
            mac[i].work[j].piece=-1;//-1表示机器不在工作
            mac[i].work[j].step=0;
        }
    }
    for(int i=0;i<n;i++){
        piece[i].step=0;
        for(int j=0;j<m;j++){
            cin>>piece[i].who[j];
            piece[i].who[j]--;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>piece[i].time[j];
            piece[i].time[j]--;
        }
    }//输入结束
    for(int i=0;i<m*n;i++){
        workpiece piece0=piece[steps[i]];
        machine mac0=mac[piece0.who[piece0.step]];
        int time0=piece0.time[piece0.step];
        int last=tmax-1;
        if(piece0.step==0) last=0;
        else{
            for(;mac0.work[last].piece!=steps[i]||mac0.work[last].step!=piece0.step-1;last--){}//查找前一工序完成时间
            last++;
        }
        int begin=last;
        for(;;begin++){//查找插入位置
            bool b=1;
            for(int j=begin;j<begin+time0;j++){
                if(mac0.work[j].piece!=-1){
                    b=0;
                    break;
                }
            }
            if(b) break;
        }
        for(int j=begin;j<begin+time0;j++){//修改数据
            mac[piece0.who[piece0.step]].work[j].piece=steps[i];
            mac[piece0.who[piece0.step]].work[j].step=piece0.step;
        }
        piece[steps[i]].step++;//下一工序
    }
    int t=0;//用时
    for(int i=0;i<m;i++){
        int t0=tmax-1;
        for(;mac[i].work[t0].piece==-1;t0--){}
        t0++;
        t=fmax(t,t0);
    }
    cout<<t;
    return 0;
}
2025/6/17 14:13
加载中...