33pts求条
  • 板块P2830 写程序
  • 楼主y1s1lll
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/15 18:14
  • 上次更新2025/7/26 10:44:20
查看原帖
33pts求条
1274919
y1s1lll楼主2025/7/15 18:14
#include <bits/stdc++.h>
using namespace std;

int last, cd, lastt, ed;
string s, now = "", wt = "", h;
struct node {
	string name;
	int size;
	int nei[105];
}x;
vector <node> a;

int calc(string ss) {
	if (isdigit(ss[0])) {
		int x = 0;
		for (int i = 0; i < ss.size(); i++) {
			x *= 10;
			x += ss[i] - '0';
		}
		return x;
	}
	string name = "", ans = "";
	int lst, cnt = 1;
	for (int i = 0; ss[i] != '['; i++) {
		name += ss[i];
		lst = i;
	}
	for (int i = lst + 2; cnt; i++) {
		if (ss[i] == '[') cnt++;
		if (ss[i] == ']') cnt--;
		if (cnt) ans += ss[i];
	}
	int idx = calc(ans);
	for (int i = 0; i < a.size(); i++) {
		if (a[i].name == name) {
			if (idx >= a[i].size) {
				cout << "-1";
				exit(0);
			}
			return a[i].nei[idx];
		}
	}
	return 0;
}

int main() {
	while (getline(cin, s)) {
		for (int i = 0; i < s.size(); i++) {
			if (s[i] == 'i' && s[i + 1] == 'n' && s[i + 2] == 't' && s[i + 3] == ' ') {
				x.name = "";
				wt = "";
				for (int j = i + 4; s[j] != '['; j++) {
					x.name += s[j];
					last = j;
				}
				int cnt = 1;
				for (int j = last + 2; cnt; j++) {
					if (s[j] == '[') cnt++;
					if (s[j] == ']') cnt--;
					if (cnt) wt += s[j];
				}
				x.size = calc(wt);
				for (int j = 0; j < x.size; j++) {
					x.nei[j] = 0;
				}
				a.push_back(x);
				break;
			}
			else if (s[i] == 'c' && s[i + 1] == 'o' && s[i + 2] == 'u' && s[i + 3] == 't' && s[i + 4] == ' ') {
				now = "";
				wt = "";
				for (int j = i + 5; s[j] != '['; j++) {
					now += s[j];
					last = j;
				}
				int cnt = 1;
				for (int j = last + 2; cnt; j++) {
					if (s[j] == '[') cnt++;
					if (s[j] == ']') cnt--;
					if (cnt) wt += s[j];
				}
				ed = calc(wt);
				for (int j = 0; j < a.size(); j++) {
					if (a[j].name == now) {
						if (ed >= a[j].size) {
							cout << "-1";
							return 0;
						}
						cout << a[j].nei[ed] << "\n";
					}
				}
				break;
			}
			else if (i == 0) {
				now = "";
				wt = "";
				h = "";
				for (int j = 0; s[j] != '['; j++) {
					now += s[j];
					last = j;
				}
				int cnt = 1;
				for (int j = last + 2; cnt; j++) {
					if (s[j] == '[') cnt++;
					if (s[j] == ']') cnt--;
					if (cnt) wt += s[j];
					lastt = j;
				} 
				ed = calc(wt);
				for (int j = lastt + 2; j < s.size(); j++) {
					h += s[j];
				}
				cd = calc(h);
				for (int j = 0; j < a.size(); j++) {
					if (a[j].name == now) {
						if (ed >= a[j].size) {
							cout << "-1";
							return 0;
						}
						a[j].nei[ed] = cd;
						break;
					}
				}
			}
		}
	}
	return 0;
}

2025/7/15 18:14
加载中...