RT,一直过不了。
#include<bits/stdc++.h>
#define lo long long
#define re register
#define Fup(i,a,b) for(lo i=a;i<=b;++i)
#define Fdo(i,a,b) for(lo i=a;i<=b;--i)
#define Fup(j,a,b) for(lo j=a;j<=b;++j)
#define Fdo(j,a,b) for(lo j=a;j<=b;--j)
using namespace std;
string step[2005];
lo cnt,x,n;
lo co[2005];
stack<lo>st;
bool check(lo x){if(abs(x)>1000000000) return 1;return 0;}
lo f(lo x)
{
while(!st.empty()) st.pop();
st.push(x);
Fup(i,1,cnt)
{
if(step[i]=="NUM")
{
if(check(co[i])) return 0;
st.push(co[i]);
}
if(step[i]=="POP")
{
if(st.empty()) return 0;
st.pop();
}
if(step[i]=="INV")
{
if(st.empty()) return 0;
lo num=st.top();
st.pop();st.push(-num);
}
if(step[i]=="DUP")
{
if(st.empty()) return 0;
st.push(st.top());
}
if(step[i]=="SWP")
{
if(st.size()<2) return 0;
lo wa=st.top();st.pop();
lo wb=st.top();st.pop();
st.push(wb);st.push(wa);
}
if(step[i]=="ADD")
{
if(st.size()<2) return 0;
lo wa=st.top();st.pop();
lo wb=st.top();st.pop();
if(check(wa+wb)) return 0;
st.push(wa+wb);
}
if(step[i]=="SUB")
{
if(st.size()<2) return 0;
lo wa=st.top();st.pop();
lo wb=st.top();st.pop();
if(check(wb-wa)) return 0;
st.push(wb-wa);
}
if(step[i]=="MUL")
{
if(st.size()<2) return 0;
lo wa=st.top();st.pop();
lo wb=st.top();st.pop();
if(check(wa*wb)) return 0;
st.push(wa*wb);
}
if(step[i]=="DIV")
{
if(st.size()<2) return 0;
lo wa=st.top();st.pop();
lo wb=st.top();st.pop();
if(wa==0) return 0;
if(check(wb/wa)) return 0;
st.push(wb/wa);
}
if(step[i]=="MOD")
{
if(st.size()<2) return 0;
lo wa=st.top();st.pop();
lo wb=st.top();st.pop();
if(wa==0) return 0;
if(check(wb%wa)) return 0;
st.push(wb%wa);
}
}
if(st.size()>1) return 0;
return st.top()+1929239;
}
void print(lo f)
{
if(!f){printf("ERROR\n");return;}
printf("%lld\n",f-1929239);
}
int main()
{
while(cin>>step[++cnt])
{
if(step[cnt]=="NUM")
{
scanf("%d",&x);
co[cnt]=x;
}
if(step[cnt]=="END"){--cnt;break;}
}
scanf("%d",&n);
Fup(i,1,n)
{
scanf("%d",&x);
print(f(x));
}
return 0;
}