第四个点是什么?
查看原帖
第四个点是什么?
541069
SuperCowHorse楼主2022/3/31 21:13

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;
}
2022/3/31 21:13
加载中...