C++求助!4~10全WA
查看原帖
C++求助!4~10全WA
677872
YOISOBA楼主2022/4/30 22:26

纯模拟,但是不知道哪里有问题 第四题始终输出44,正确答案47 附上输入: 3 8 6 4 5 1 7 8 4 2 6 5 2 4 1 2 6 8 3 7 1 3 3 7 5 8 1 2 3 1 3 2 3 2 1 2 1 3 3 1 2 1 2 3 3 1 2 1 2 3 4 5 2 3 5 3 6 4 2 4 5 6 3 1 7 7 5 3 4 4 5 8 5 9

#include<iostream>
#include<string>
#include<ctype.h>
using namespace std;
int order[400],mac[20][20],time_[20][20],finish[20];//顺序,工件加工机器顺序,工序时间 ,机器是否完成 ,mac[i][j]是第i个工件的j道工序 
//finish  -1:未完成(在做)  0:有空位 
//mac  0:做完  -1:在做  >=1:机器号 
int n,m;
int dotime[20];//dotime是目前的时间情况 [机器号]
int indexofmac(int aim,int& x,int& y){//aim是第几个机器 ,x是工件号,y是工序号,对应机器时要保证前面的工序已经完成 
	int ti,tj,find=0;
	for(ti=0;ti<n*m;ti++){
		if(order[ti]==-1) continue;
		for(tj=0;tj<m;tj++){
			if(mac[order[ti]-1][tj]==0) continue;//order[ti]是工件号,tj是工序号
			if(mac[order[ti]-1][tj]!=aim) break; 
			if(finish[aim-1]==0){
				x=order[ti]-1;
				y=tj;
				mac[x][y]=-1;
				finish[aim-1]=-1;
				order[ti]=-1;
				return 1;
			}
			else if(finish[aim-1]==-1){
				find=1;
				break;
			}
		}
	}
	return 0;
}
int findmindotime(){
	int i,min=0;
	for(i=0;i<m;i++){
		if(dotime[i]==0) continue;
		else if(min==0){
			min=dotime[i];
		}
		else min=(min>dotime[i])?dotime[i]:min;
	}
	return min;
}
void placeprocess(int a[][2]){
	for(int i=0;i<m;i++){
		if(dotime[i]!=0) continue;
		int temp=indexofmac(i+1,a[i][0],a[i][1]);
		if(temp==1) dotime[i]=time_[a[i][0]][a[i][1]];
		else dotime[i]=0;
	}
}
int main(){
	int i,j,t=0;//n:工件数 ,m:机器数,工序数 
	cin>>m>>n;
	for(i=0;i<n*m;i++){
		cin>>order[i];
	}
	for(i=0;i<n;i++){
		finish[i]=0;
		for(j=0;j<m;j++){
			cin>>mac[i][j];
		}
	}
	for(i=0;i<n;i++){
		for(j=0;j<m;j++){
			cin>>time_[i][j];
		}
	}
	int a[m][2];//m台机器,第一个是机器号上的工件号,第二个是机器号上的工序号 ,a[i][0/1]是第i台机器上的工件号/工序号
	for(i=0;i<m;i++){
		dotime[i]=0;
	}
	while(1){
		placeprocess(a);
		int min=findmindotime();
		if(min!=0){
			t+=min;
			for(i=0;i<m;i++){
				if(dotime[i]==0) continue;
				else if(dotime[i]==min){
					dotime[i]=0;
					finish[i]=0;
					mac[a[i][0]][a[i][1]]=0;
				}
				else dotime[i]-=min;
			}
		}
		else{
			break;
		}
	}
	cout<<t;
	return 0;
}
2022/4/30 22:26
加载中...