33分求助,在线等
  • 板块P2830 写程序
  • 楼主Mine_KingCattleya
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/8/21 19:47
  • 上次更新2023/11/6 19:43:52
查看原帖
33分求助,在线等
195331
Mine_KingCattleya楼主2020/8/21 19:47

RT,#3,#4,#8,#9AC,其他都 WA

#include<map>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<iostream>
using namespace std;
bool flag=true;
string opt;
struct node
{
	int len;
	int num[105];
};
map<string,node>mp;
int dfs(int now)
{
	if(opt[now]>='0'&&opt[now]<='9')
	{
		int x=0;
		for(int i=now;i<(int)opt.length();i++)
		{
			if(opt[i]==']') break;
			x=x*10+(opt[i]-'0');
		}
		return x;
	}
	string s="";
	int i;
	for(i=now;i<(int)opt.length();i++)
	{
		if(opt[i]=='[') break;
		s.push_back(opt[i]);
	}
	int k=dfs(i+1);
	if(k>=mp[s].len)
	{
		printf("-1\n");
		exit(0);
	}
	return mp[s].num[k];
}
void yuju(int op,string bl,string zhi)
{
	int k;
	if(op==3)
	{
		opt=zhi;
		k=dfs(0);
	}
	for(int i=0;i<(int)bl.length();i++)
		if(bl[i]=='[')
		{
			string s=bl.substr(0,i);
			opt=bl.substr(i+1);
			int n=dfs(0);
			if(op>1&&n>=mp[s].len)
			{
				printf("-1\n");
				exit(0);
			}
			if(op==1) mp[s]=(node){n,{}};
			else if(op==2) printf("%d\n",mp[s].num[n]);
			else mp[s].num[n]=k;
			break;
		}
	return ;
}
int main()
{
	string ss;
	while(getline(cin,ss))
	{
		string s;
		int m;
		string op="";
		for(m=0;ss[m]!=' ';m++) op.push_back(ss[m]);//获得这一段前面那部分
		if(op=="int") yuju(1,ss.substr(m+1),"");
		else if(op=="cout") yuju(2,ss.substr(m+1),"");
		else yuju(3,op,ss.substr(m+1));
	}
	return 0;
}
2020/8/21 19:47
加载中...