30分求调
查看原帖
30分求调
737575
liangjindong0504楼主2023/7/29 20:46

本人亲测第一个测试点过了,但是wa,猜是输入有问题,求助大佬。

期望得分:无wa。(可能TLE)

#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
	int hang;
	string str;
}a[110];
map<char,int>bianliang; 
int ans;
int z=1; 
bool flas; 
bool cmp(node x,node y){
	return x.hang<y.hang;
}
map<int,int>weizhi; 
void work(int u){//坐标 
	ans++;
	if(ans>=1000000||u>n||u<=0){//死循环 
		cout<<"-1";
		exit(0);
	}
	string bufen[100];
	for(int i=1;i<=30;i++){
		bufen[i].clear();
	}
	//分解 
	z=1;
	for(int i=0;i<a[u].str.size();i++){
		if(a[u].str[i]==' '){
			z++;
		}else{
			bufen[z]+=a[u].str[i];
		}
	}
	if(z==1&&bufen[1]=="END"){
		cout<<ans;
		exit(0);
	}
	if(z==1){//累加 或 输出 
		if(bufen[1][1]=='+'){//累加 
			int shuzi=0;
			for(int i=2;i<bufen[1].size();i++){
				shuzi=shuzi*10+(bufen[1][i]-'0');
			}
			bianliang[bufen[1][0]]+=shuzi;
		}
		work(u+1);
	}else if(z==2){//转移 
		int shuzi=0;
		for(int i=0;i<bufen[2].size();i++){
			shuzi=shuzi*10+(bufen[2][i]-'0');
		}
		work(weizhi[shuzi]);
	}else{//条件 
		int shuzi=0;
		for(int i=2;i<bufen[2].size();i++){
			shuzi=shuzi*10+(bufen[2][i]-'0');
		}
		int wei=0;
		for(int i=0;i<bufen[4].size();i++){
			wei=wei*10+(bufen[4][i]-'0');
		}
		if(bianliang[bufen[2][0]]==shuzi){
			work(weizhi[wei]);
		}else{
			work(u+1);
		}
	}
} 
int main(){
	while(cin>>a[++n].hang){
		getchar();
		getline(cin,a[n].str);
		if(a[n].str=="END"){
			flas=1;
		}
	}
	n--;
	if(!flas){
		cout<<"-1";
		return 0;
	}
	//按行排序 
	sort(a+1,a+n+1,cmp);
	for(int op=1;op<=n;op++){
		weizhi[a[op].hang]=op;
	}
	work(1);
	return 0;
}
2023/7/29 20:46
加载中...