化学方程式

题目描述

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;
}

猜你喜欢

转载自www.cnblogs.com/LJA001162/p/12678601.html
今日推荐