Mircale

用的hzwer的代码,事实证明多样检测是无用的,还不如暴力一波。

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#define _S (205)
#define LL long long
using namespace std;
int N, G;
int Op[_S];
LL Num[_S];
LL Pow (LL a, LL b) {
    
    LL ans=1;
    for(int i=1; i<=b; i++) 
        ans*=a;
    return ans;
    
}
void calc (int pot, int op) {
    
    if (op==0) Num[pot-1]=Num[pot-1]-Num[pot]; 
    if (op==1) Num[pot-1]=Num[pot-1]+Num[pot];
    if (op==2) Num[pot-1]=Num[pot-1]*Num[pot];
    if (op==4) Num[pot-1]=Pow(Num[pot-1], Num[pot]);
    
}
LL RESULT (string a) {
    
    int op=0;
    int len=a.length();
    int p=-1, q=-1;
    LL num=0;
    for(int i=0; i<len; i++) {
        if(a[i]=='a') 
            Num[++p]=G; 
        else if (a[i]>='0'&&a[i]<='9') 
            num=num*10+a[i]-'0';        
        else if (a[i]!=' ') {
            if (num!=0) {
                Num[++p]=num;       
                num=0;  
            }
            if (a[i]=='-') op=0;
            if (a[i]=='+') op=1;
            if (a[i]=='*') op=2;
            if (a[i]=='^') op=4;
            if (a[i]=='(') op=8;
            if (a[i]==')') op=16;
            if (op==8) {
                Op[++q]=op; 
            } 
            else if (op==16) 
                while(q>=0&&Op[q--]!=8) 
                    calc(p--,Op[q+1]);  
            else {
                while(q>=0&&Op[q]<=4&&Op[q]/2>=op/2) 
                    calc(p--, Op[q--]);
                Op[++q]=op;
            }
        }   
    }
    if (num) {
        Num[++p]=num;   
        num=0;
    }
    while(q>=0) 
        calc(p--, Op[q--]);
    return Num[0];
    
}
int main () {
    
    ios::sync_with_stdio(false);
    string a, b;
    int flag=1;
    getline(cin, a);
    //scanf("%d\n", &N);
    cin >> N;
    getline(cin, b);
    for(int i=1; i<=N; i++) {
        flag=1;
        getline(cin, b);
        //for(int j=100; j<=300; j++) {
            //G=i;
            G=19260817;
            if (RESULT(a)!=RESULT(b)) {
                flag=0;
                //break;    
            }   
        //}
        if (flag) cout << (char)('A'+i-1);      
    }
    return 0;
        
}

0 条评论

目前还没有评论...

信息

ID
1003
难度
7
分类
字符串 点击显示
标签
递交数
7412
已通过
1549
通过率
21%
被复制
50
上传者