Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int MX = 3e6+8;
  6. typedef long double ld;
  7. typedef long long ll;
  8. typedef complex<ld> cplx;
  9.  
  10. const ld Pi = acos(-1.0);
  11.  
  12. void change(vector<cplx> &y) {
  13. int ln = y.size();
  14. for (int i = 1, j = ln >> 1; i < ln - 1; i++) {
  15. if (i < j)
  16. swap(y[i], y[j]);
  17. int k = ln >> 1;
  18. while (j >= k) {
  19. j -= k;
  20. k >>= 1;
  21. }
  22. j += k;
  23. }
  24. }
  25.  
  26. void fft(vector<cplx> &y, int on) {
  27. change(y);
  28. int len = y.size();
  29. for (int m = 2; m <= len; m <<= 1) {
  30. cplx wm(cos(-on * 2 * Pi / m), sin(-on * 2 * Pi / m));
  31. for (int k = 0; k < len; k += m) {
  32. cplx w(1, 0);
  33. for (int j = 0; j < m / 2; j++) {
  34. cplx u = y[k + j];
  35. cplx t = w * y[k + j + m / 2];
  36. y[k + j] = u + t;
  37. y[k + j + m / 2] = u - t;
  38. w = w*wm;
  39. }
  40. }
  41. }
  42. if (on == -1)
  43. for (int i = 0; i < len; i++)
  44. y[i].real(y[i].real() / len);
  45. }
  46.  
  47. void mult(vector<ll> a, vector<ll> b, vector<ll> &res) {
  48. int len = 1, la = a.size(), lb = b.size();
  49. while (len < la + lb)
  50. len <<= 1;
  51. vector<cplx> x1(len), x2(len);
  52. for (int i = 0; i < la; i++)
  53. x1[i] = cplx(a[i], 0);
  54. for (int i = la; i < len; i++)
  55. x1[i] = cplx(0, 0);
  56. for (int i = 0; i < lb; i++)
  57. x2[i] = cplx(b[i], 0);
  58. for (int i = lb; i < len; i++)
  59. x2[i] = cplx(0, 0);
  60. fft(x1, 1);
  61. fft(x2, 1);
  62. for (int i = 0; i < len; i++)
  63. x1[i] = x1[i] * x2[i];
  64. fft(x1, -1);
  65. res.resize(len);
  66. for (int i = 0; i < len; i++)
  67. res[i] = x1[i].real() + 0.5;
  68. }
  69.  
  70. vector <long long> v,u,res;
  71. int main() {
  72. int n;
  73. cin>>n;
  74. v.resize(2000000);
  75. u.resize(2000000);
  76. for ( int i=0 ; i<n ; i++ )
  77. {
  78. long long x;
  79. cin>>x;
  80. v[x] = u[x] = 1;
  81. }
  82. mult( v , u , res );
  83. //for ( int i=0 ; i<2000000 ; i++ ) { cout<<res[i]<<" "; }
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement