ProblemB: A.挑战密室

2019-01-18  本文已影响0人  坠木

百行代码,纪念一下,哈哈.

#include<stdio.h>

#include<string>

#include<stack>

#include<iostream>

using namespace std;

int judgement(string s);

int change(char ch);

int main()

{

int k;

scanf("%d",&k);

while(k--){

string str;

cin>>str;

int final=judgement(str);

printf("%04d\n",final);

    }

    return 0;

}

int judgement(string s)

{

int i,sum=0,num,multi=1;

stack<char> st;

for(i=0;i<s.size();i++){

if(s[i]!='=')continue;

else break;

}

i++;

if(s[i]<='9'&&s[i]>='2'){

multi=(int)(s[i]-'0');

i++;

    }

for(i;i<s.size();i++){

if(s[i]=='+') break;

st.push(s[i]);

}

while(!st.empty()){

num=1;

int sumson=0;

if(st.top()>='2'&&st.top()<='9'){

    num=(int)(st.top()-'0');

    st.pop();

    if(st.top()==')'){

    st.pop();

    i++;

    while(st.top()!='('){

    if(st.top()>='A'&&st.top()<='Z')

    sumson+=change(st.top());

    else{

    if(st.top()=='a'){

    st.pop();

    i++;

    if(st.top()=='C') sumson+=40;

    else if(st.top()=='N') sumson+=23;

}

                    else if(st.top()=='l'){

                    st.pop();

                    i++;

                    if(st.top()=='A') sumson+=27;

                    else sumson+=35;

}

else{

st.pop();

                    i++;

                    sumson+=65;

}

}

st.pop();

}

}

else{

if(st.top()>='A'&&st.top()<='Z')

    sumson+=change(st.top());

    else{

    if(st.top()=='a'){

    st.pop();

    if(st.top()=='C') sumson+=40;

    else if(st.top()=='N') sumson+=23;

}

                    else if(st.top()=='l'){

                    st.pop();

                    if(st.top()=='A') sumson+=27;

                    else sumson+=35;

}

else{

st.pop();

                    sumson+=65;

}

}

}

}

else {

if(st.top()>='A'&&st.top()<='Z')

    sumson+=change(st.top());

    else{

    if(st.top()=='a'){

    st.pop();

    if(st.top()=='C') sumson+=40;

    else if(st.top()=='N') sumson+=23;

}

                    else if(st.top()=='l'){

                    st.pop();

                    if(st.top()=='A') sumson+=27;

                    else sumson+=35;

}

else{

st.pop();

                    sumson+=65;

}

}

}

sum+=num*sumson;

st.pop();

}

    return multi*sum;

}

int change(char ch)

{

if(ch=='N') return 14;

else if(ch=='O') return 16;

else if(ch=='C') return 12;

else if(ch=='S') return 32;

else if(ch=='H') return 2;

}

上一篇下一篇

猜你喜欢

热点阅读