本人亲测第一个测试点过了,但是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;
}