1114

来源:互联网 发布:互联网运营 知乎 编辑:程序博客网 时间:2024/06/13 11:21
 
#include <iostream>#include <string>#include <map>#include <vector>#include <cctype>using namespace std;void solute(const char *form, map<string, int> &ele){vector<map<string, int>> chele;while(*form){int num = 0;for(; isdigit(*form) != 0; ++form){num = num * 10 + (*form - '0');}if(0 == num){num = 1;}chele.push_back(map<string, int>());while(*form && *form != '+'){if('(' == *form){chele.push_back(map<string, int>());++form;}else if(')' == *form){int tmp = 0;for(++form; isdigit(*form) != 0; ++form){tmp = tmp * 10 + (*form - '0');}if(0 == tmp){tmp = 1;}vector<map<string, int>>::iterator last = chele.end() - 1, lbo = last - 1;for(map<string, int>::iterator iter = last ->begin(); iter != last ->end(); ++iter){iter ->second *= tmp;map<string, int>::iterator add = lbo ->find(iter ->first);if(add != lbo ->end()){add ->second += iter ->second;}else{lbo ->insert(*iter);}}chele.pop_back();}else if(isalpha(*form) != 0){string tmp(1, *form);for(++form; islower(*form) != 0; ++form){tmp.push_back(*form);}int tempnum = 0;for(; isdigit(*form) != 0; ++form){tempnum = tempnum * 10 + (*form - '0');}if(0 == tempnum){tempnum = 1;}vector<map<string, int>>::iterator iter = chele.end() - 1;map<string, int>::iterator sid = iter ->find(tmp);if(sid != iter ->end()){sid ->second += tempnum;}else{iter ->insert(pair<string, int>(tmp, tempnum));}}}if(chele.size() != 1){cout << "OMG!\n" << endl;}for(map<string, int>::iterator iter = chele[0].begin(); iter != chele[0].end(); ++iter){map<string, int>::iterator sea = ele.find(iter ->first);if(sea != ele.end()){sea ->second += num * iter ->second;}else{iter ->second *= num;ele.insert(*iter);}}chele.clear();if('+' == *form){++form;}}}int main(){int n;string lside, rside;map<string, int> lele, rele;cin >> lside >> n;solute(lside.c_str(), lele);for(; n; --n){cin >> rside;rele.clear();solute(rside.c_str(), rele);bool equal = true;map<string, int>::iterator liter = lele.begin(), riter = rele.begin();for(; liter != lele.end() && riter != rele.end(); ++liter, ++riter){if(liter ->first != riter ->first || liter ->second != riter ->second){equal = false;cout << lside << "!=" << rside << endl;break;}}if(equal && liter == lele.end() && riter == rele.end()){cout << lside << "==" << rside << endl;}}return 0;}