问题标题: 酷町堂:我人傻了

0
0
已解决
黄依成
黄依成
中级天翼
中级天翼

1986   栈函数

这题是谁出的?这么毒瘤?

有人做出来吗?

↓WA20分代码

#include<iostream>
#include<queue>
#include<cmath>
using namespace std;
string t,s[2005],tssz;
int num,n,m;
bool flag;
long long a[1000005];
queue<long long> q;
int sz(string s){
    int t=0;
    for(int i=0;i<s.size();i++) t=t*10+s[i]-'0';
    return t;
}
bool check(long long x){
    if(abs(0-x)>1000000000)  return false;
    return true;
}
void INV(){
    long long t=q.front();
    if(!check(t)){cout<<"ERROR!"<<endl;flag=true;return ;}
    cout<<t<<endl;
    q.pop();
    q.push(0-t);
}
void SWP(){
    long long x=q.front();q.pop();
    long long y=q.front();q.pop();
    if(!check(x)||!check(y)){cout<<"ERROR!"<<endl;flag=true;return ;}
    q.push(y),q.push(x);
}
void ADD(){
    long long x=q.front();q.pop();
    long long y=q.front();q.pop();
    if(!check(x+y)){cout<<"ERROR!"<<endl;flag=true;return ;}
    cout<<x+y<<endl;
    q.push(x+y);
}
void SUB(){
    long long x=q.front();q.pop();
    long long y=q.front();q.pop();
    if(!check(y-x)){cout<<"ERROR!"<<endl;flag=true;return ;}
    cout<<y-x<<endl;
    q.push(y-x);
}
void MUL(){
    long long x=q.front();q.pop();
    long long y=q.front();q.pop();
    long long t=x*y;
    if(!check(t)){cout<<"ERROR!"<<endl;flag=true;q.push(x),q.push(y);return ;}
    cout<<t<<endl;
    q.push(t);
}
void DIV(){
    long long x=q.front();q.pop();
    long long y=q.front();q.pop();
    if(!check(y/x)){cout<<"ERROR!"<<endl;flag=true;return ;}
    cout<<y/x<<endl;
    q.push(y/x);
}
void MOD(){
    long long x=q.front();q.pop();
    long long y=q.front();q.pop();
    if(!check(y%x)){cout<<"ERROR!"<<endl;flag=true;return ;}
    cout<<y%x<<endl;
    q.push(y%x);
}
int main(){
    while(cin>>t){
        if(!(t[0]>='A'&&t[0]<='Z')){tssz=t;break;}
        if(t=="NUM"){cin>>num;q.push(num);}
        s[++n]=t;
    }
    m=sz(tssz);
    for(int i=1;i<=m;i++){cin>>a[i];q.push(a[i]);}
    for(int i=1;i<=n;i++){
        if(s[i]=="NUM") continue;
        if(s[i]=="POP") q.pop();
        if(s[i]=="INV") INV();
        if(s[i]=="DUP") q.push(q.front());
        if(s[i]=="SWP") SWP();
        if(s[i]=="ADD") ADD();
        if(s[i]=="SUB") SUB(); 
        if(s[i]=="MUL") MUL();
        if(s[i]=="DIV") DIV();
        if(s[i]=="MOD") MOD();
        if(s[i]=="END"){
            if(q.size()!=1||flag) cout<<"ERROR!"<<endl;
        }
    }
    ADD();
    return 0;
}

好的我人已经成功写傻了/yun

有没有好心人看一看


0
已采纳
汪宇航
汪宇航
新手启示者
新手启示者

呵呵~~我来了

学校战力95%

这道题可能要用像bfs、LCA等才能AC

0
汪宇航
汪宇航
新手启示者
新手启示者

注意:

数据范围及提示 Data Size & Hint

【提示】

仔细考虑不合法的情况,避免不必要的Runtime Error和Wrong Anwser。

【数据规模】

函数操作步数<=2000

询问数<=2000

0
0
0
王泽轩
王泽轩
资深天翼
资深天翼

看不懂。。。(初学者侠客猫,学校战力13名)

0
0
朱小川
朱小川
缔造者
缔造者

我17

朱小川在2021-04-28 19:15:49追加了内容

你的代码我只能看懂一丢丢

0
我要回答