B3789代码,帮忙看看有什么问题
别说这只是一道黄题,难死了,建议升绿
#include <bits/stdc++.h>
using namespace std;
int n,k,len,s,y,i,j;
vector<int> xli;
stack<int> st;
set<int> ans;
char a[1010][1010];
struct node{
bool tp;
char op;
int va;
int ed;
}p[1010];
int fun(int x){
y = 0;
for (i = 1;i <= n;i++){
if (p[i].tp){
if (p[i].op == '<') if (x >= p[i].va) i = p[i].ed;
if (p[i].op == '>') if (x <= p[i].va) i = p[i].ed;
}else y = p[i].va;
}
return y;
}
int main(){
scanf("%d\n",&n);
for (i = 1;i <= n;i++){
cin >> a[i];
len = strlen(a[i]);
p[i].tp = 0;
p[i].op = '?';
s = 0;
for (j = 0;j < len;j++){
if (a[i][j] == '<') p[i].op = '<';
if (a[i][j] == '>') p[i].op = '>';
if (a[i][j] == '}'){
p[i].tp = 1;
int topp = st.top();
st.pop();
p[topp].ed = i;
break;
}
if (j > 0 && a[i][j - 1] == 'i' && a[i][j] == 'f'){
p[i].tp = 1;
st.push(i);
}
if (isdigit(a[i][j])) s = s * 10 + a[i][j] - 48;
}
p[i].va = s;
if (p[i].tp){
if (p[i].op == '<') xli.push_back(s - 1);
else xli.push_back(s + 1);
}
}
for (int i = 0;i < xli.size();i++) ans.insert(fun(xli[i]));
set<int>::iterator it;
for(it = ans.begin();it != ans.end();it++) cout << *it <<' ';
return 0;
}