8WA+TLE(本地RE)(悬赏1个关注))
查看原帖
8WA+TLE(本地RE)(悬赏1个关注))
1036180
ChampionCyan楼主2024/4/5 13:57

题目

#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;

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)
		return -1;
	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);
			if (v == -1)
				return 0 & printf("-1");
			printf("%d\n", v);
		} else {
			if (value(inside(a)) >= mem[name(a)].len)
				return 0 & printf("-1\n");
			mem[name(a)].vec[value(inside(a))] = value(b);
		}
	}
	return 0;
}
2024/4/5 13:57
加载中...