# 題目: 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"; | |
} | |
} |