调不动了。
#include<bits/stdc++.h>
#define endl '\n'
typedef long long ll;
using namespace std;
string s[105],tmp;
stringstream ss;
map<string,int> m;
map<int,int> ma;
int cnt,n;
int get(string x){ss.str("");int ans;ss << x;ss >> ans;return ans;}
void go(int line){
++cnt;
if(cnt > 1000000){cout << -1;exit(0);}
ss.str("");ss << s[line];ss >> tmp >> tmp;
if(tmp == "END"){cout << cnt;exit(0);}
if(tmp == "IF"){string name;int num,l;ss >> name >> tmp >> num >> tmp >> l;if(m[name] == num)go(ma[l]);}
else if(tmp == "GO"){int l;ss >> l;go(ma[l]);}
else{string name;int num;if(tmp.find('+') != tmp.npos)name = tmp.substr(0,tmp.find('+')),m[name] += atoll(tmp.substr(tmp.find('+') + 1).c_str());go(line + 1);}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(getline(cin,s[++n])){while(s[n][s[n].size() - 1] == '\r' || s[n][s[n].size() - 1] == '\n')s[n].erase(s[n].size() - 1,1);}n--;
for(int i = 1;i <= n;i++){
for(int j = i;j <= n;j++)if(get(s[i]) > get(s[j]))swap(s[i],s[j]);
}
for(int i = 1;i <= n;i++)ma[get(s[i])] = i;
go(1);
}
调试后,发现 stringstream 在读取第二行的时候反而去读了第一行的内容。
难道这题不允许我偷懒吗?!