求助 stringstream
查看原帖
求助 stringstream
857323
linxuanrui楼主2023/9/30 18:14

调不动了。

#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 在读取第二行的时候反而去读了第一行的内容。

难道这题不允许我偷懒吗?!

2023/9/30 18:14
加载中...