丑陋的代码如下:
#include <bits/stdc++.h>
#define ll long long
#define lowbit(i) (i & -i)
#define pii pair <int, int>
using namespace std;
struct node {
int siz;
map <int, int> arr;
// #1 : siz #2 : array (map)
} ;
map <char, node> s;
bool fg, kkk; int id;
inline int dfs(string a, int l, int r) {
if (isdigit(a[l])) {
int num = 0;
for (int i = l; i <= r; ++i)
num = num * 10 + a[i] - '0';
return num;
}
if (isalpha(a[l])) {
int pos = dfs(a, l + 2, r - 1);
if (pos >= s[a[l]].siz)
fg = false;
if (l == 0) id = pos;
if (pos <= s[a[l]].siz && !s[a[l]].arr.count(pos))
kkk = false;
return s[a[l]].arr[pos];
}
return 0;
}
inline void solve() {
s.clear();
string x;
while (true) {
bool vis = true;
int ans = 0;
bool shuchu = false;
while (cin >> x) {
if (vis && x == ".") return ;
if (x == ".") break;
ans ++;
vis = false;
kkk = fg = true;
// cout << s['a'].arr.count(2) << '\n';
if (x.find("=") == -1) {
int num = 0;
for (int i = 2; i < x.size() - 1; ++i)
num = num * 10 + x[i] - '0';
// cout << x[0] << " " << num << "\n";
s[x[0]].siz = num;
} else {
string a = x.substr(0, x.find("="));
string b = x.substr(x.find("=") + 1);
if (b[0] >= '0' && b[0] <= '9') {
// number
int num = 0;
for (int i = 0; i < b.size(); ++i)
num = num * 10 + b[i] - '0';
id = 0;
dfs(a, 0, a.size() - 1);
s[a[0]].arr[id] = num;
if (!fg) cout << ans << "\n", shuchu = true;
} else {
id = 0;
fg = true; kkk = true;
dfs(b, 0, b.size() - 1);
int kk = id; id = 0;
bool sb = false;
if (!fg || !kkk) {
cout << ans << "\n";
shuchu = true;
sb = true;
}
fg = true; kkk = true;
dfs(a, 0, a.size() - 1);
s[a[0]].arr[kk] = s[b[0]].arr[id];
if (sb) continue;
if (!fg) {
cout << ans << "\n";
shuchu = true;
continue;
}
fg = true; kkk = true;
}
}
}
if (!shuchu) cout << "0\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
return 0;
}
自知代码又长又臭,不求调,只求Hack!!