タイトルの説明
クラス102は毎日化学方程式を書いていますが、今では方程式を修正する方法を見つける必要があります。方程式内の反応物の順序は、間にスペースがあっても異なっていてもかまいません。降水量やガスの兆候、反応条件はありません。係数が正しくありません(添え字が間違っている場合、CO2がCO3の場合、係数も間違っています。同じ要素と異なる係数を持つ化学式は、反応物または生成物に表示されません。たとえば、COとCO2は反応物または生成物に一緒に表示されません。中央)、間違った化学式、反応物の欠如、両側の元素は保存されていません。
入力
最初の行にN、Mと入力します
長さNの文字列を2行目に正しい方程式として入力します
修正する方程式の3行目に長さMの文字列を入力します
アウトプット
正しい出力RIGHT
1行目にエラーWRONGが出力され、2行目にエラーの原因が出力されます(係数のみが正しくない場合は1、その他のエラーと3つ以上のエラーは2)。
入力例
34 29 2Na OH + H2S O4 = Na 2 S O4 + 2H2O H2S O4 + 2NaO H = Na2 S O4 + 2H2O
出力例
正しい
プロンプト
34 25
2Na OH + H2S O4 = Na 2 SO4 + 2H2O
H2S O4
+ NaO H = 2H2O +2 K Cl
違う
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 (レジスタint i =(j); i <=(k); i ++) 名前空間std を使用 ; char a [ 1005 ]、b [ 1005 ]; ベクトル < 文字列 > ys1、ys2; int fff、h1、h2; テンプレート < クラス T>インラインvoid read(T&x){ x = 0 ; 登録char c = getchar(); レジスターbool f = 0 ; while(!isdigit(c))f ^ = c == ' - '、c = getchar(); 一方、(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 ')が trueを返す; if(x <= ' Z ' && x> = ' A ')はtrueを返し ます。 if(x <= ' z ' && x> = ')trueを返し ます。 if(x == ' ' || x == ' + ' || x == ' = ')はtrueを返し ます。 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)続行; 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)続行; 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()); もし(ys1 == ys2) { if(h1 == h2) { cout << " RIGHT " << endl; 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; それ以外の場合 cout << 2 << endl; 帰る 0 ; }