登录之后查看代码,点此登录账号
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int lx, rx, lval, rval;
vector<string> split(string s, char t)
{
vector<string> res;
for (int i = 0; i < s.size(); i++)
{
string tmp;
int j = i;
while (s[j] != t) tmp += s[j ++ ];
i = j;
res.push_back(tmp);
}
return res;
}
int main()
{
string s;
cin >> s;
auto items = split(s + '=', '=');
string s1 = items[0], s2 = items[1];
if (s1[0] != '-') s1 = '+' + s1;
if (s2[0] != '-') s2 = '+' + s2;
for (int i = 1; i < s1.size(); i++)
{
string tmp;
int j = i;
while (j < s1.size() && (s1[j] != '+' && s1[j] != '-')) tmp += s1[j ++];
i = j;
char op = s1[j - tmp.size() - 1];
if (op == '+')
{
if (tmp.back() == 'x')
{
if (tmp.size() == 1) lx ++;
else lx += stoi(tmp.substr(0, tmp.size() - 1));
}
else
lval += stoi(tmp);
}
else
{
if (tmp.back() == 'x')
{
if (tmp.size() == 1) lx --;
else lx -= stoi(tmp.substr(0, tmp.size() - 1));
}
else
lval -= stoi(tmp);
}
}
for (int i = 1; i < s2.size(); i++)
{
string tmp;
int j = i;
while (j < s2.size() && (s2[j] != '+' && s2[j] != '-')) tmp += s2[j ++];
i = j;
char op = s2[j - tmp.size() - 1];
if (op == '+')
{
if (tmp.back() == 'x')
{
if (tmp.size() == 1) rx ++;
else rx += stoi(tmp.substr(0, tmp.size() - 1));
}
else
rval += stoi(tmp);
}
else
{
if (tmp.back() == 'x')
{
if (tmp.size() == 1) rx --;
else rx -= stoi(tmp.substr(0, tmp.size() - 1));
}
else
rval -= stoi(tmp);
}
// cout << "!!!" << tmp.substr(0, tmp.size() - 1) << endl;
// cout << op << ' ' << tmp << endl;
}
// cout << lx << ' ' << lval << ' ' << rx << ' ' << rval << endl;
if (lx == rx)
{
if (lval == rval) puts("infinite solutions");
else puts("no solution");
}
else
{
rval -= lval;
lx -= rx;
printf("x=%d\n", rval / lx);
}
return 0;
}