ProblemB: A.挑战密室
百行代码,纪念一下,哈哈.
#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;
}