绿色模拟41ptsWA(悬赏1个关注)
查看原帖
绿色模拟41ptsWA(悬赏1个关注)
1036180
ChampionCyan楼主2024/4/5 15:00

题目

#include <unordered_map>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
typedef vector < int > vi;
unordered_map < string, vi > mem;

void end();

int digit(string);

string inside(string);

string name(string);

int value(string);

int main() {
	string a, b;
	while (cin >> a >> b) {
		if (a == "int") {
			vi m;
			int len = value(inside(b));
			for (int i = 1; i <= len; i++)
				m.push_back(0);
			mem.insert(make_pair(name(b), m));
		} else if (a == "cout")
			printf("%d\n", value(b));
		else {
			if (value(inside(a)) >= mem[name(a)].size())
				end();
			vi v = mem[name(a)];
			int vb = value(b);
			string va = name(a);
			mem.erase(va);
			v[value(inside(a))] = vb;
			mem.insert(make_pair(va, v));
		}
	}
	exit(0);
}

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 (mem[name(s)].size() <= v)
		end();
	return v;
}
2024/4/5 15:00
加载中...