玄关 求条 全wa
  • 板块P2830 写程序
  • 楼主whr_AK_j
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/23 22:51
  • 上次更新2024/10/24 10:27:38
查看原帖
玄关 求条 全wa
823410
whr_AK_j楼主2024/10/23 22:51
#include<bits/stdc++.h>
using namespace std;
map<string,int>mp;
map<string,int>uid;
char a[100005+10][1005];
int b[100005+10][1005];
int len[100005+10];
int n=1,v;
string ss;
int dfs(string s)
{
	if(s[0]<='9'&&'0'<=s[0])
	{
		int cnt=0;
		for(int i=0;i<(int)s.size();i++)
		{
			cnt*=10;
			cnt+=(s[i]-'0');
		}
		return cnt;
	}
	string cnt,x;
	int sum=0,pre;
	for(int i=0;i<(int)s.size();i++)
	{
		if(s[i]=='[')
		{
			pre=i+1;
			break;
		}
		x+=s[i];
	}
	for(int i=pre;i<(int)s.size()-1;i++)
	{
		if(s[i]==']')
		{
			sum--;
			if(sum==0)
			{
				cnt+=s[i];
				break;
			}
		}
		if(s[i]=='[')sum++;
		cnt+=s[i];
	}
	int m=dfs(cnt);
	if(m>=mp[x])
	{
		cout<<-1;
		exit(0);
	}	
	return b[uid[x]][m];
}
int main()
{
	while(gets(a[n]))
	{
		len[n]=strlen(a[n]);
		n++;
	}
	n--;
	for(int id=1;id<=n;id++)
	{
		if(a[id][0]=='i')
		{
			string s;
			int pre,cnt=0;
			for(int x=4;x<len[id];x++)
			{
				if(a[id][x]=='[')
				{
					pre=x+1;
					break;
				}
				s+=a[id][x];
			}
			for(int x=pre;x<len[id]-1;x++)
			{
				cnt*=10;
				cnt+=(a[id][x]-'0');
			}
			mp[s]=cnt;
			uid[s]=++v;
		}
		else if(a[id][0]=='c')
		{
			string s,cnt;
			int pre;
			for(int i=5;i<len[id];i++)
			{
				if(a[id][i]=='[')
				{
					pre=i+1;
					break;
				}
				s+=a[id][i];
			}
			int sum=0;
			for(int i=pre;i<len[id]-1;i++)
			{
				if(a[id][i]==']')
				{
					if(sum==0)
					{
						pre=i+3;
						break;						
					}
					sum--;
				}
				if(a[id][i]=='[')sum++;
				cnt+=a[id][i];
			}
			int w=dfs(cnt);
			cout<<b[uid[s]][w]<<"\n";
		}
		else 
		{
			string s,cnt;
			int pre,x=0;
			for(int i=0;i<len[id];i++)
			{
				if(a[id][i]=='[')
				{
					pre=i+1;
					break;
				}
				s+=a[id][i];
			}
			int sum=0;
			for(int i=pre;i<len[id];i++)
			{
				if(a[id][i]==']')
				{
					if(sum==0)
					{
						pre=i+2;
						break;						
					}
					sum--;
				}
				if(a[id][i]=='[')sum++;
				cnt+=a[id][i];
			}
			for(int i=pre;i<len[id];i++)
			{
				x*=10;
				x+=(a[id][i]-'0');
			}
			int m;
			m=dfs(cnt);
			if(m>=mp[s])
			{
				cout<<-1<<"\n";
				return 0;
			}
			b[uid[s]][m]=x;
		}
	}
	return 0;
}
2024/10/23 22:51
加载中...