# 題目: UVa 10326 - The Polynomial Equation

# 題目說明

給你一個方程式的n組解,求此方程式展開的樣子


INPUT:
輸入一個整數n,代表方程式有n組解
接下來輸入n個整數,各代表一組解
直到EOF結束


OUTPUT:
輸出展開後的方程式

# 解題方法

假設解為k1, k2, ..., kn,則方程式可以表示成(x - k1) * (x - k2) * ... * (x - kn) = 0
由此可知能透過乘法將方程式展開 (類似於大數乘法)
比較要注意的是這題的輸出格式很複雜

# 參考程式碼

#include <iostream>
#include <vector>

using namespace std;

static auto fast_io = []
{
	ios::sync_with_stdio(false);
	cout.tie(nullptr);
	cin.tie(nullptr);
	return 0;
}();

int main()
{
	int n, num;

	while (cin >> n)
	{
		vector<long long> buf = {1};

		while (n--)
		{
			cin >> num;
			vector<long long> t = { -num, 1 };
			vector<long long> mul(buf.size() + t.size(), 0);

			for (int i = 0; i < buf.size(); ++i)
				for (int j = 0; j < t.size(); ++j)
					mul[i + j] += buf[i] * t[j];

			while (!mul.empty() && mul.back() == 0) mul.pop_back();
			buf = mul;
		}
		
		for (int i = buf.size() - 1; i >= 0; --i)
		{
			if (buf[i] == 0 && i != 0) continue;
			if (i != buf.size() - 1) cout << (buf[i] >= 0 ? " + " : " - ");
			if ((buf[i] != 1 && buf[i] != -1) || i == 0) cout << (buf[i] > 0 ? buf[i] : -buf[i]);
			if (i != 0) cout << "x";
			if (i > 1) cout << "^" << i;		
		}
		cout << " = 0\n";
	}
}