64ptsWA有注释玄关
查看原帖
64ptsWA有注释玄关
735089
ECNUAT_LZX楼主2025/7/25 22:28
#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,n;
int a[1000],ord[100][100],tot[100],cnt;//第i个物件第j道工序的顺序 
int ti[100][100];//第i个物件的第j个工序所花费的时间 
int fac[100][100];//第i个物件的第j个工序要在哪一台机器上运行 
int t=1;
int xtl[100][100];//第i个物品的第j道工序在t秒时完成 
struct node{
	int x=0,y=0;
};
node val[25][100005];//第i台设备第j秒时正在制作第a个工件的第m道工序的占有情况 
node pos(int cn){
	for (int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(ord[i][j]==cn){
				node p;
				p.x=i;
				p.y=j;
				return p;
			}
		}
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	
	cin>>m>>n;
	
	for (int i = 1;i<=m*n;i++){
		cin >> a[i];
	}
	
	for (int i =1;i<=m*n;i++){
		ord[a[i]][++tot[a[i]]]=++cnt;
	}
	for (int i = 1;i <= n;i++){
		for (int j =1;j<=m;j++){
			cin>>fac[i][j];
		}
	}
	
	for (int i = 1;i <= n;i++){
		for (int j =1;j<=m;j++){
			cin>>ti[i][j];
		}
	}
	for (int i = 1;i <= cnt;i++){
		node pis = pos(i);
		int xs=pis.x,ys=pis.y;
		for(int j = 1;j<=100000;j++){
			bool flag=1;
			for(int k = j;k<=j+ti[xs][ys];k++){	
				if(val[fac[xs][ys]][k].x)flag=0;		
			}
			//检查需要加工的时间是否空余 
			//cout << i << " " << xs << " " << ys << " " << flag << endl; 
			for(int i=1;i<=ys-1;i++)
				if(xtl[xs][i]>=j)
					flag = 0;
			//检查之前的工序是否被完成
			//cout << i << " " << xs << " " << ys << " " << flag << endl; 
			//cout<<"---------------------------------\n";
			if(flag){
				for(int g = j; g <= ti[xs][ys]+j-1;g++)
					val[fac[xs][ys]][g]=node{xs,ys};
				t=max(t,ti[xs][ys]+j-1);
				//cout << t << endl;
				xtl[xs][ys]=ti[xs][ys]+j-1;
				break;
			}
		}
	}
	cout<<t;
	return 0;
}
2025/7/25 22:28
加载中...