求条
查看原帖
求条
1043466
wanghaolin2013楼主2025/1/29 15:37

WA最后一个

#include <bits/stdc++.h>
using namespace std;
int v1[1000], v2[1000];
int t1[1000], t2[1000];
int h[1000], v[1000];

void tj1(string a) {
	string ls = "";
	a += '+';
	for (int i = 0; i < a.size(); i++) {
		if (a[i] == '+') {
			//	cout << ls << endl;
			int o = ls.find('^'), s = 0, s1 = 0, v = 0;//x^y s:x s1:y
			if (o > ls.size()) {
				for (int j = 0; j < ls.size(); j++) {
					if (a[j] == 'a') {
						v = 1;
						break;
					}
					s = s * 10 + ls[j] - '0';
				}
			} else {
				for (int j = 0; j < o; j++) {
					if (a[j] == 'a') {
						v = 1;
						break;
					}
					s = s * 10 + ls[j] - '0';
				}
				//-------------------------------------------------
				for (int j = o + 1; j < ls.size(); j++) {
					if (j > a.size()) {
						break;
					}
					s1 = s1 * 10 + ls[j] - '0';
				}
			}
			ls = "";
			t1[s1] += s;
			v1[s1] += v;
			i++;
		}
		ls += a[i];
	}
	return ;
}

void tj2(string a) {
	string ls = "";
	a += '+';
//	cout << a;
	for (int i = 0; i < a.size(); i++) {
		if (a[i] == '+') {
			//	cout << ls << endl;
			int o = ls.find('^'), s = 0, s1 = 0, v = 0;//x^y s:x s1:y
			if (o > ls.size()) {
				for (int j = 0; j < ls.size(); j++) {
					if (a[j] == 'a') {
						v = 1;
						break;
					}
					s = s * 10 + ls[j] - '0';
				}
			} else {
				for (int j = 0; j < o; j++) {
					if (a[j] == 'a') {
						v = 1;
						break;
					}
					s = s * 10 + ls[j] - '0';
				}
				//-------------------------------------------------
				for (int j = o + 1; j < ls.size(); j++) {
					if (j > a.size()) {
						break;
					}
					s1 = s1 * 10 + ls[j] - '0';
				}
			}
			ls = "";
			t2[s1] += s;
			v2[s1] += v;
			i++;
		}
		ls += a[i];
	}
	return ;
}

string ci(int e) {
	string k = "";
	while (e != 0) {
		k = char('0' + e % 10) + k;
		e /= 10;
	}
	return k;
}

string hb() {
	for (int i = 0; i <= 30; i++) {
		for (int j = 0; j <= 30; j++) {
			h[i + j] += t1[i] * t2[j];
			v[i + j] += (v1[i] || v2[j]);
		}
	}
//	for (int i = 0; i <= 30; i++) {
//		cout << i << " " << h[i] << " " << v[i] << endl;
//	}
	string p = "";
	//cout << 1;
	for (int i = 30; i >= 0; i--) {
		if (h[i] != 0) {
			//cout << 1;
			p += ci(h[i]);
			if (v[i] != 0) {
				p += 'a';
			}
			if (i != 0) {
				p += '^';
				p += ci(i);
				p += '+';
			}
		}
	}
//	cout << p << endl;
	return p;
}

int main() {
	string s;
	while (getline(cin, s)) {
		memset(t1, 0, sizeof(t1));
		memset(t2, 0, sizeof(t2));
		memset(v1, 0, sizeof(v1));
		memset(v2, 0, sizeof(v2));
		memset(h, 0, sizeof(h));
		memset(v, 0, sizeof(v));
		//特判:有没有乘号
		//cout << s.find("*") << endl;
		if (s.find('*') >= s.size()) 	{

			for (int i = 0; i < s.size(); i++) {
				if (s[i] != ' ') {
					cout << s[i];
				}
			}
		}
		//p1:拆成两个字符串
		string s1 = "", s2 = "";
		int i = 1;
		for (; i < s.size(); i++) {
			if (s[i] == ')') {
				break;
			}
			if (s[i] != ' ' && s[i] != '(' && s[i] != '*') {
				s1 += s[i];
			}

		}
		i += 3;
		for (; i < s.size(); i++) {
			if (s[i] == ')') {
				break;
			}
			if (s[i] != ' ' && s[i] != '(' && s[i] != '*') {
				s2 += s[i];
			}
		}
		//cout << s1 << " " << s2 << endl;
		//p2
		tj1(s1);
//		for (int i = 0; i < 3; i++) {
//			cout << i << " " << t1[i] << " " << v1[i] << endl;
//		}
//		cout << endl;
		tj2(s2);
//		for (int i = 0; i < 3; i++) {
//			cout << i << " " << t2[i] << " " << v2[i] << endl;
//		}
		cout << hb() << endl;
	}
	return 0;
}

2025/1/29 15:37
加载中...