题目
#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;
}