92分求救
  • 板块P2830 写程序
  • 楼主_luanyi_
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/4/27 19:42
  • 上次更新2023/10/28 02:47:32
查看原帖
92分求救
300313
_luanyi_楼主2022/4/27 19:42
#include <bits/stdc++.h>
#define fq(i,a,b) for (int i = (a); i <= (b); i++)
#define fnq(i,a,b) for (int i = (a); i < (b); i++)
#define nfq(i,a,b) for (int i = (a); i >= (b); i--)
#define nfnq(i,a,b) for (int i = (a); i > (b); i--)
#define elif else if
using namespace std;

struct arr {
	int sz;
	vector <int> a;
};
map <string, arr> p;
vector <string> tmp;
int solve (string s) { // 将一段代码转成一个数字,RE返回-1
	int j = 0, num = 0;
	tmp.clear ();
	fnq (i, 0, s.size ()) {
		if (s[i] == '[') tmp.push_back (s.substr (j, i - j)), j = i + 1;
		elif (isdigit (s[i])) num = num * 10 + s[i] - '0';
	}
	nfq (i, tmp.size () - 1, 0) {
		string s = tmp[i];
		if (p[s].sz <= num) return -1;
		num = p[s].a[num];
	} return num;
}
string s;
signed main () {
	while (cin >> s) {
		if (s == string ("int")) {
			cin >> s;
			string ss = s.substr (0, s.find ("["));
			int cnt = 0, flag = 0, st = -1, ed;
			fnq (i, 0, s.size ()) {
				if (s[i] == '[') {
					if (st == -1) st = i + 1;
					cnt++, flag = 1;
				}
				elif (s[i] == ']') cnt--;
				if (!cnt && flag) {
					ed = i - 1;
					break;
				}
			}
			int sz = solve (s.substr (st, ed - st + 1));
			if (sz == -1) cout << -1, exit (0);
			p[ss].sz = sz;
			p[ss].a.clear ();
			p[ss].a.resize (sz);
			fnq (i, 0, sz) p[ss].a[i] = 0;
		} elif (s == string ("cout")) {
			cin >> s;
			int res = solve (s);
			if (res == -1) cout << -1, exit (0);
			else cout << res << endl;
		} else {
			int cnt = 0, flag = 0, st = -1, ed;
			fnq (i, 0, s.size ()) {
				if (s[i] == '[') {
					if (st == -1) st = i + 1;
					cnt++, flag = 1;
				}
				elif (s[i] == ']') cnt--;
				if (!cnt && flag) {
					ed = i - 1;
					break;
				}
			}
			int u = solve (s.substr (st, ed - st + 1));
			string t; cin >> t;
			int v = solve (t);
			if (u == -1 || v == -1) cout << -1, exit (0);
			string name = s.substr (0, st - 1);
			if (u >= p[name].sz) cout << -1, exit (0);
			p[name].a[u] = v;
		}
	}
	return 0;
}
/*
int cout[10]
cout[cout[0]] 3
cout cout[cout[0]]
*/
2022/4/27 19:42
加载中...