zoukankan      html  css  js  c++  java
  • 化学方程式

    题目描述

    102班每天要写化学方程式,现在要想办法批改方程式。方程式中反应物的顺序可以不一样,中间可以有空格。不会出现沉淀和气体符号和反应条件。错误有系数不对(下标不对,如CO2为CO3也算系数不对。反应物或生成物中不会出现元素相同,系数不同的化学式,如:CO和CO2不会一起出现在反应物或生成物中),化学式错误,缺少反应物,两边元素不守恒。

    输入

    第一排输入N,M

    第二排输入长度为N的字符串为正确方程式

    第三排输入长度为M的字符串为要批改方程式

    输出

    正确输出RIGHT

    错误第一排输出WRONG,第二排输出错误原因(只系数不对为1,其他错误和有两个以上错误为2)

    样例输入

    34  29
    2Na  O H + H2S O4 = Na 2 S O4+2H2O
    H2S O4 +2NaO H =Na2 S O4+2H2O
    

    样例输出

    RIGHT

    提示

    34  25

    2Na  O H + H2S O4 = Na 2 SO4 +2H2O

    H2S O4
    +NaO H=2H2O +2 K Cl

    WRONG

    2

    1<=N<=100

    1<=M<=100

    代码

    #pragma GCC optimize(1)
    #pragma GCC optimize(2)
    #pragma GCC optimize(3)
    #pragma GCC optimize("Ofast")
    #include<bits/stdc++.h>
    #define rep(i, j, k) for (register int i = (j); i <= (k); i ++)
    using namespace std;
    char a[1005],b[1005];
    vector< string >ys1,ys2;
    int fff,h1,h2;
    template <class T> inline void read(T &x) {
        x = 0;
        register char c = getchar();
        register bool f = 0;
        while (!isdigit(c)) f ^= c == '-', c = getchar();
        while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
        if (f) x = -x;
    }
    string getnum(string s)
    {
        string tmp="";
        int len=s.length();
        for(int i=0;i<len;i++)
        {
            if(s[i]<='9'&&s[i]>='0')
            {
                tmp=tmp+s[i];
            }
        }
        return tmp;
    }
    string getchar(string s)
    {
        string tmp="";
        int len=s.length();
        for(int i=0;i<len;i++)
        {
            if(s[i]>'9'||s[i]<'0')
            {
                tmp=tmp+s[i];
            }
        }
        return tmp;
    }
    bool check(char x)
    {
        if(x<='9'&&x>='0') return true;
        if(x<='Z'&&x>='A') return true;
        if(x<='z'&&x>='a') return true;
        if(x==' '||x=='+'||x=='=') return true;
        return false;
    }
    int main()
    {
        string tmp=""; 
        gets(a);
        gets(a);
        gets(b);
        int n=strlen(a);
        int m=strlen(b);
        for(int i=0;i<n;i++)
        {
            if(fff==0&&a[i]!=' ') h1+=a[i];
            if(a[i]=='=') fff=1;
            if(check(a[i])!=1) continue;
            if(a[i]=='+'||a[i]=='=')
            {
                ys1.push_back(tmp);
                tmp="";
            }
            else if(a[i]!=' ')
            {
                tmp=tmp+a[i];
            }
        }
        if(tmp!="")
        {
            ys1.push_back(tmp);
        }
        tmp="";
        fff=0;
        for(int i=0;i<m;i++)
        {
            if(fff==0&&b[i]!=' ') h2+=b[i];
            if(b[i]=='=') fff=1;
            if(check(b[i])!=1) continue;
            if(b[i]=='+'||b[i]=='=')
            {
                ys2.push_back(tmp);
                tmp="";
            }
            else if(b[i]!=' ')
            {
                tmp=tmp+b[i];
            }
        }
        if(tmp!="")
        {
            ys2.push_back(tmp);
            tmp="";
        }
        sort(ys1.begin(),ys1.end());
        sort(ys2.begin(),ys2.end());
        if(ys1==ys2)
        {
            if(h1==h2)
            {
                cout<<"RIGHT"<<endl;
                return 0;
            }
        }
        int c1=0,c2=0;
        if(ys1.size()!=ys2.size())
            c1=1,c2=1;
        else
        {
            n=ys1.size();
            for(int i=0;i<n;i++)
            {
                if(ys1[i]!=ys2[i])
                {
                    if(getnum(ys1[i])!=getnum(ys2[i]))
                        c1=1;
                    if(getchar(ys1[i])!=getchar(ys2[i]))
                        c2=1;
                }
            }
        }
        cout<<"WRONG"<<endl;
        if(c1==1&&c2==0) cout<<1<<endl;
        else cout<<2<<endl;
        return 0;
    }
  • 相关阅读:
    网页的尺寸
    前端大杂烩总结
    vscode 2.0 配置
    关于node 版本的一个奇葩的问题 :HPE_UNEXPECTED_CONTENT_LENGTH error #3103
    ADO.NET 增删改查的基本用法
    面向对象 类库 委托
    三大特性:封装,继承,多态
    面向对象 抽象类 多态
    SQL数据库基础(九)
    SQL数据库基础(八)
  • 原文地址:https://www.cnblogs.com/LJA001162/p/12678601.html
Copyright © 2011-2022 走看看