zoukankan      html  css  js  c++  java
  • P2382 化学分子式

    题目

    模拟

    1、遇到'(',我们就把栈的层数+1,以便出栈时累计

    2、遇到字母后,判断下一位是否是小写字母,将其在map中的值取出加入栈中,再将最近一次的元素保存(暂记作key),等会有用^_^,别忘了判断UNKNOWN。

    3、遇到数字,while循环取出它(记作x),说明上次的key有了用武之地,在栈中加入(x - 1)倍的key元素质量,因为上一次加了一份嘛

    4、若遇到')',我们考虑直接取出后面的数字(还是x),然后将本层栈中答案乘上x,加入上一层栈中并清空这一层。

    完结撒花!

    #include<bits/stdc++.h>
    using namespace std;
    map<string,int> a;
    string s,ss;
    int x,top,b[100005];
    int main() {
        cin>>s;
        while (s!="END_OF_FIRST_PART") {
            cin>>x;
            a[s]=x;
            cin>>s;
        }
        cin>>s;
        while (s!="0") {
            int fl=1;
            memset(b,0,sizeof(b));
            s=' '+s;
            top=0;
            for (int i=1; i<=s.length(); i++) {
                if (s[i]>='A' && s[i]<='Z') {
                    if (s[i+1]>='a' && s[i+1]<='z') {
                        ss=s.substr(i,2);
                        i++;
                    } else ss=s.substr(i,1);
                    if (!a[ss]) {
                        printf("UNKNOWN
    ");
                        fl=0;
                        break;
                    } else b[top]+=a[ss];
                }
                if (s[i]>='0' && s[i]<='9') {
                    x=0;
                    while (s[i]>='0' && s[i]<='9') {
                        x=x*10+s[i]-'0';
                        i++;
                    }
                    i--;
                    b[top]+=(x-1)*a[ss];
                }
                if (s[i]=='(') top++;
                if (s[i]==')') {
                    i++,x=0;
                    while (s[i]>='0' && s[i]<='9') {
                        x=x*10+s[i]-'0';
                        i++;
                    }
                    b[--top]+=x*b[top+1];
                    b[top+1]=0;
                    i--;
                }
            }
            if (fl) printf("%d
    ",b[0]);
            cin>>s;
    
        }
    
        return 0;
    }
  • 相关阅读:
    Set / Map 集合 -ES6
    getter/setter
    构造函数-class类 -语法糖 -ES6
    原型链-继承
    创建对象/克隆
    Generator生成器函数- ES6
    iframe跨域访问
    setTimeout延迟加载
    adt新建项目后去掉appcompat_v7的解决方法
    PHP数组的操作
  • 原文地址:https://www.cnblogs.com/zzrblogs/p/12201861.html
Copyright © 2011-2022 走看看