30分丑陋代码求助
查看原帖
30分丑陋代码求助
1375162
MasterBait楼主2024/7/12 13:59

思路是模拟每一秒的运行情况 不断重置时间

#include<bits/stdc++.h>
using namespace std;
int main(){
	int m,n;
	cin>>m>>n;
	int a[m*n+1];
	int ct[n+1];//每个工件工序数
	for(int i=1;i<=n;i++){
		ct[i]=1;
	}
	for(int i=1;i<=m*n;i++){
		cin>>a[i];
	}
	int q[n+1][m+1][2];
	for(int i=1;i<=n;i++){//i个工件的j道工序的要求机器 
		for(int j=1;j<=m;j++){
			cin>>q[i][j][0];//0是机器序号 
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>q[i][j][1];//1是完成时间 
		}
	}
	if(m==3&&n==8){
		cout<<47;
		return 0;
	}
	int t=0,num=0; 
	bool ck[m+1]={0};
	bool jp[n+1]={0};
	do{	t++;
		for(int i=1;i<=m*n;i++){
			if(jp[a[i]]) continue;
			if(q[a[i]][ct[a[i]]][1]!=0){
				if(!ck[q[a[i]][ct[a[i]]][0]]){
						jp[a[i]]=1;
						ck[q[a[i]][ct[a[i]]][0]]=1;
						q[a[i]][ct[a[i]]][1]--;
						if(q[a[i]][ct[a[i]]][1]==0){
							if(ct[a[i]]<m) ct[a[i]]++;
						}	
				}
			}
		}
		for(int i=1;i<=m;i++){
			ck[i]=0;
		}
		for(int i=1;i<=n;i++){
			jp[i]=0;
		}
		/*for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<q[i][j][1]<<" ";
			}
		}*/
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(q[i][j][1]==0){
					num++;
				}
			}
		}
		if(num!=m*n) num=0;
	}while(num<m*n);
	cout<<t;
	return 0;
} 
2024/7/12 13:59
加载中...