100分求助 Subtask #1 WA
查看原帖
100分求助 Subtask #1 WA
704456
sleepinmybed楼主2022/8/18 13:33

代码如下:

#include<bits/stdc++.h>
using namespace std;

struct jiqi {
	string sjz; // 定义每个机器的时间轴(用string方便查找连续的"0")
} jq[20];

struct gongjian {
	int gongxu,jsz; // 定义工序与上一工序结束时刻(其实是下一工序开始时刻)
	int gxdyjq[20],gxsj[20]; // 定义每个工序对应的机器与每个工序所需时间
} gj[20];

int turn[400],jqs,gjs; // 定义安排顺序、机器数和工件数
string zero[19]={"0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000"};

int main() {
	for (int i=0;i<20;i++) {
		for (int j=1;j<=8000;j++) {
			jq[i].sjz+="0";
		}
	} // 将每个机器时间轴设置为0
	cin >> jqs >> gjs;
	for (int i=0;i<jqs*gjs;i++) {
		cin >> turn[i];
	}
	for (int i=0;i<gjs;i++) {
		for (int j=0;j<jqs;j++) {
			cin >> gj[i].gxdyjq[j];
		}
	}
	for (int i=0;i<gjs;i++) {
		for (int j=0;j<jqs;j++) {
			cin >> gj[i].gxsj[j];
		}
	}
	for (int i=0;i<jqs*gjs;i++) {
		gj[turn[i]-1].gongxu++; // 进入下一工序
		int s=jq[gj[turn[i]-1].gxdyjq[gj[turn[i]-1].gongxu-1]-1].sjz.find(zero[gj[turn[i]-1].gxsj[gj[turn[i]-1].gongxu-1]-1],gj[turn[i]-1].jsz); // 查找机器中符合工序的空余时间
		for (int j=s;j<=s+gj[turn[i]-1].gxsj[gj[turn[i]-1].gongxu-1]-1;j++) {
			jq[gj[turn[i]-1].gxdyjq[gj[turn[i]-1].gongxu-1]-1].sjz[j]='1'; // 将用过的时间设为1
            gj[turn[i]-1].jsz=s+gj[turn[i]-1].gxsj[gj[turn[i]-1].gongxu-1]; // 更新结束值
		}
	}
	int max=0;
	for (int i=0;i<jqs;i++) {
        // cout << jq[i].sjz << endl; // 调试时间轴
		for (int j=jqs*gjs*20-1;j>=0;j--) {
			if (jq[i].sjz[j]=='1' && j>max) max=j;
		}
	}
	cout << max+1; // 求总用时
	return 0;
} 

输出:380 正确答案:7200 (另一个问题:当设时间轴长度为800(粗心qwq)时50分,subtask1输出7220(虽然也是错的),是什么情况?) 真心发问!求各位巨佬帮帮蒟蒻吧!!!

2022/8/18 13:33
加载中...