错的让人一脸懵
查看原帖
错的让人一脸懵
332304
寺中言楼主2021/1/1 20:28

#3#5WA,其中#3居然是too short。求助各位大佬。

#include<bits/stdc++.h>
using namespace std;
inline void read(long long &x){
	x=0;
	int y=1;
	char a;
	a=getchar();
	while(a<'0'||a>'9'){
		if(a=='-')y=-1;
		a=getchar();
	}
	while(a>='0'&&a<='9'){
		x=x*10+a-'0';
		a=getchar();
	}
	x*=y;
}
string ff[2008];
long long ffz[2008];
long long fz[2008];
int fd,fc;
int ffez;
bool ffee;
long long n;
int main(){
	++ffez;
	for(int i=1;;++i){
		cin>>ff[i];
		if(ff[i]=="END")break;
		if(!ffee){
			++fc;
	    	if(ff[i]=="NUM"){
		    	read(ffz[i]);
			    ++ffez;
		    }
	    	if(ff[i]=="POP")--ffez;
	    	if(ff[i]=="DUP"&&ffez<=0)ffee=true;
		    if(ff[i]=="DUP")++ffez;
		    if(ff[i]=="ADD"&&ffez<=1)ffee=true;
		    if(ff[i]=="SUB"&&ffez<=1)ffee=true;
		    if(ff[i]=="MUL"&&ffez<=1)ffee=true;
		    if(ff[i]=="DIV"&&ffez<=1)ffee=true;
		    if(ff[i]=="MOD"&&ffez<=1)ffee=true;
		    if(ff[i]=="INV"&&ffez<1)ffee=true;
		    if(ff[i]=="ADD")--ffez;
	    	if(ff[i]=="SUB")--ffez;
		    if(ff[i]=="MUL")--ffez;
	    	if(ff[i]=="DIV")--ffez;
		    if(ff[i]=="MOD")--ffez;
		    if(ff[i]=="SWP"&&ffez<=1)ffee=true;
	    	if(ffez<0)ffee=true;
		}
	}
	read(n);
	if(ffez!=1||ffee){
		for(long long i=1;i<=n;++i){
			cout<<"ERROR"<<endl;
		}
		return 0;
	}
	for(long long i=1;i<=n;++i){
		fd=0;
		long long a;
		read(a);
		++fd;
		fz[fd]=a;
		if(abs(a)>1000000000){
			cout<<"ERROR"<<endl;
			continue;
		}
		bool flag=true;
		for(int j=1;j<=fc;++j){
			if(ff[j]=="NUM")fz[++fd]=ffz[j];
			if(ff[j]=="POP")--fd;
			if(ff[j]=="INV")fz[fd]=-fz[fd];
			if(ff[j]=="DUP")fz[++fd]=fz[fd-1];
			if(ff[j]=="SWP")swap(fz[fd],fz[fd-1]);
			if(ff[j]=="ADD")fz[--fd]+=fz[fd+1];
			if(ff[j]=="SUB")fz[--fd]-=fz[fd+1];
			if(ff[j]=="MUL")fz[--fd]*=fz[fd+1];
			if(ff[j]=="DIV"){
				if(fz[fd]==0){
					cout<<"ERROR"<<endl;
					flag=false;
					break;
				}
				fz[--fd]/=fz[fd+1];
			}
			if(ff[j]=="MOD"){
				if(fz[fd]==0){
					cout<<"ERROR"<<endl;
					flag=false;
					break;
				}
				fz[--fd]%=fz[fd+1];
			}
			if(abs(fz[fd])>1000000000){
				cout<<"ERROR"<<endl;
			    flag=false;
				break;
			}
		}
		if(flag)cout<<fz[fd]<<endl;
	}
	return 0;
}

2021/1/1 20:28
加载中...