v 0. Pasted by slipstak2 as cpp at 2011-01-08 14:28:51 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 13.
  2. // 13A. Двойная решетка [dlattice]
  3. // ibelyaev: 06Jan2011
  4.  
  5. #include <iostream>
  6. #include <cstdio>
  7. #include <algorithm>
  8. #include <vector>
  9. #include <set>
  10.  
  11. using namespace std;
  12.  
  13. int x1,y1,x2,y2,dx,dy;
  14. void input()
  15. {
  16.     cin>>x1>>y1>>x2>>y2>>dx>>dy;
  17. }
  18. int gcd(int a, int b)
  19. {
  20.     return b ? gcd(b, a%b) : a;
  21. }
  22. int lcm(int a, int b)
  23. {
  24.     return  (a*b)/gcd(a,b);
  25. }
  26. void output(set<int> &S)
  27. {
  28.     printf("%d\n",S.size());
  29.     for (set<int>::iterator it = S.begin(); it != S.end(); it++)
  30.         printf("%d\n",*it);
  31. }
  32. void solve()
  33. {
  34.     int maxX = dx + lcm(x1, x2);
  35.     int maxY = dy + lcm(y1, y2);
  36.     vector<int> X, Y;
  37.     set<int> S;
  38.  
  39.     for (int x = 0; x<=maxX; x+=x1)
  40.         X.push_back(x);
  41.     for (int x = dx; x<=maxX; x+= x2)
  42.         X.push_back(x);
  43.    
  44.  
  45.     for (int y = 0; y<=maxY; y+=y1)
  46.         Y.push_back(y);
  47.     for (int y = dy; y<=maxY; y+=y2)
  48.         Y.push_back(y);
  49.  
  50.     sort(X.begin(), X.end());
  51.     sort(Y.begin(), Y.end());
  52.     int dx, dy;
  53.     for (int i = 0; i < X.size()-1; i++) {
  54.         for (int j = 0; j < Y.size()- 1; j++) {
  55.             dx = X[i+1] - X[i];
  56.             dy = Y[j+1] - Y[j];
  57.             S.insert(dx*dy);
  58.         }
  59.     }
  60.     S.erase(0);
  61.     output(S);
  62. }
  63. int main()
  64. {
  65.     freopen("input.txt","r",stdin);
  66.     freopen("output.txt","w",stdout);
  67.  
  68.     input();
  69.     solve();
  70.     return 0;
  71. }


Editing is locked.