fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. vector<int> poly_mul_naive(const vector<int>& a, const vector<int>& b)
  7. {
  8. if (a.empty() || b.empty())
  9. {
  10. return vector<int>();
  11. }
  12. vector<int> ret(a.size() + b.size() - 1, 0);
  13. for (int ia = 0; ia < a.size(); ia++)
  14. {
  15. for (int ib = 0; ib < b.size(); ib++)
  16. {
  17. ret[ia + ib] += a[ia] * b[ib];
  18. }
  19. }
  20. return ret;
  21. }
  22.  
  23. void print_poly(const vector<int>& a)
  24. {
  25. cout << "[";
  26. if (!a.empty())
  27. {
  28. cout << a[a.size() - 1];
  29. }
  30. for (int i = a.size() - 2; i >=0; i--)
  31. {
  32. cout << ", " << a[i];
  33. }
  34. cout << "]";
  35. }
  36.  
  37. istream& operator>>(istream& input, vector<int>& v)
  38. {
  39. v.clear();
  40. size_t size;
  41. input >> size;
  42. v.reserve(size);
  43. for (size_t i = 0; i < size; i++)
  44. {
  45. int a;
  46. input >> a;
  47. v.push_back(a);
  48. }
  49. return input;
  50. }
  51.  
  52. int main()
  53. {
  54. vector<int> a;
  55. cin >> a;
  56. vector<int> ret(1, 1); // [1]
  57. vector<int> poly(2, 1); // [1; 1] - drugi (idx: 0) element będziemy zastępywać
  58. for (int i = 0; i < a.size(); i++)
  59. {
  60. poly[0] = -a[i];
  61. ret = poly_mul_naive(ret, poly);
  62. }
  63. print_poly(ret);
  64. return 0;
  65. }
Success #stdin #stdout 0s 3436KB
stdin
3
2 -2 1
stdout
[1, -1, -4, 4]