91pts WA#9求助谢谢!
查看原帖
91pts WA#9求助谢谢!
1037637
Akabane_Karuma楼主2024/8/13 22:30

——我们之中需要一位智者。蒸汽,上!(整活完毕)

对于变量:

s1 s2 每行读入的两个字符串

value 储存输入数据的程序中的数组

左边 string 类型记录数组名

右边 pair 类型中:

int 类型记录数组大小

vector<int> 类型记录数组内容

p 和 v 用来记录 value 值的辅助

res1 对于每次递归,[ 左边的内容,即数组名

res2 对于每次递归,[] 中间的内容,即下次递归的内容

res3 每次递归的返回值

如果数组越界,递归返回 -1,所有递归返回都会变成 -1

接下来请食用 9191 pts 代码:

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
map<string,pair<int,vector<int> > > value;
pair<int,vector<int> > p;
vector<int> v;
int fix(string s)
{
	//cout<<"fix "<<s<<endl;
	if(48<=s[0]&&s[0]<=57)
	{
		int res=0,t=1;
		for(int i=s.size()-1;i>=0;i--)
		{
			res+=t*(s[i]-48);
			t*=10;
		}
		return res;
	}
	else
	{
		int index1=s.find('['),res3;
		string res1=s.substr(0,index1),res2=s.substr(index1+1,s.size()-index1-2);
		res3=fix(res2);
		if(res3>=value[res1].first||res3==-1)
		    return -1;
		return value[res1].second[res3];
	}
}
int main()
{
	while(cin>>s1)
	{
		cin>>s2;
		if(s1=="int")
		{
			int index1=s2.find('['),res3;
			string res1=s2.substr(0,index1),res2=s2.substr(index1+1,s2.size()-index1-2);
			res3=fix(res2);
			if(res3==-1)
			{
				cout<<-1<<endl;
				return 0;
			}
			p.first=res3;
			v.clear();
			for(int i=1;i<=res3;i++)
			    v.push_back(0);
			p.second=v;
			value[res1]=p;
		}
		else if(s1=="cout")
		{
			int res3=fix(s2);
			if(res3==-1)
			{
				cout<<-1<<endl;
				return 0;
			}
			cout<<res3<<endl;
		}
		else
		{
			int index1=s1.find('['),res3;
			string res1=s1.substr(0,index1),res2=s1.substr(index1+1,s1.size()-index1-2);
			res3=fix(res2);
			if(res3>=value[res1].first||res3==-1)
			{
				cout<<-1<<endl;
				return 0;
			}
			value[res1].second[res3]=fix(s2);
		}
	}
	return 0;
}
2024/8/13 22:30
加载中...