16pts(悬赏关注*1)
查看原帖
16pts(悬赏关注*1)
1036180
ChampionCyan楼主2024/4/5 14:13
#include <unordered_map>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
typedef vector < int > vi;

struct arr {
	int len;
	vi vec;
};

unordered_map < string, arr > mem;

void end() {
	puts("-1");
	exit(0);
}

int digit(string s) {
	int a = (int)s.length(), ret = 0;
	for (int i = 0; i < a; i++)
		if (s[i] < '0' || s[i] > '9')
			return -1;
		else
			ret = ret * 10 + s[i] - '0';
	return ret;
}

string inside(string s) {
	int l = 0, r = int(s.length()) - 2;
	string ss = "";
	while (s[l] != '[')
		l++;
	while (l < r)
		ss += s[++l];
	return ss;
}

string name(string s) {
	int i = 0;
	string ss = "";
	while (s[i] != '[')
		ss += s[i++];
	return ss;
}

int value(string s) {
	if (digit(s) > 0)
		return digit(s);
	int v = value(inside(s));
	if (v == -1 || mem[name(s)].len <= v)
		end();
	return v;
}

int main() {
	string a, b;
	while (cin >> a >> b) {
		if (a == "int") {
			arr m;
			m.len = value(inside(b));
			for (int i = 1; i <= m.len; i++)
				m.vec.push_back(0);
			mem.insert(make_pair(name(b), m));
		} else if (a == "cout") {
			int v = value(b);
			printf("%d\n", v);
		} else {
			if (value(inside(a)) >= mem[name(a)].len)
				end();
			mem[name(a)].vec[value(inside(a))] = value(b);
		}
	}
	return 0;
}
2024/4/5 14:13
加载中...