【UVA】1596 Bug Hunt(模拟)

题目

题目
 


分析

算是个模拟吧
 


代码

#include <bits/stdc++.h>
using namespace std;
map<int,int> a[130];
char s[85];
int n[130];
int PosIs()
{
	int len=strlen(s);
	for(int i=0;i<len;i++)
		if(s[i]=='=') return i;
	return -1;
}
int get_num(int k)
{
	int res=0;
	if(isalpha(s[k]))
	{
		int t=get_num(k+2);
		if(t<0|| t>=n[s[k]] || !a[s[k]].count(t))
			res=-1;
		else res=a[s[k]][t];
	}
	for(int i=k;isdigit(s[i]);i++)
	{
		if(i==k && s[i]=='0' && isalpha(s[i+1]))
		{
			res=-1;
			break;
		}
		res=res*10+s[i]-'0';
	}
	return res;
}
int main()
{
	int res=0;
	while(scanf("%s",s) && s[0]!='.')
	{
		int ans=0,cnt=0;
		for(int i=0;i<130;i++) a[i].clear();
		do
		{
			if(ans) continue;
			cnt++;
			int k=PosIs();
			if(k<0)
			{
				int t=get_num(2);
				if(t<0){ans=cnt; continue;}
				n[s[0]]=t;
			}
			else
			{
				int t1=get_num(2);
				if(t1<0||t1>=n[s[0]]) {ans=cnt;continue;}
				int t2=get_num(k+1);
				if(t2<0) {ans=cnt;continue;}
				a[s[0]][t1]=t2;
			}
		}while(scanf("%s",s) && s[0]!='.');
		printf("%d
",ans);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/noblex/p/7897302.html