v 0. Pasted by slipstak2 as cpp at 2010-11-23 23:01:06 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 6.
  2. // 6D. Площадь прямоугольников [rectarea]
  3. // ibelyaev: 23Nov2010
  4.  
  5. #include <iostream>
  6. #include <cstdio>
  7. #include <vector>
  8. #include <algorithm>
  9.  
  10. using namespace std;
  11.  
  12. vector<int> X,Y;
  13. void Add(vector<int> &mas , int value)
  14. {
  15.     vector<int>::iterator it = lower_bound(mas.begin(),mas.end(),value);
  16.     if (it == mas.end() || *it != value)
  17.         mas.insert(it,value);
  18. }
  19.  
  20. // оси координат вправо и вниз
  21. struct RECT
  22. {
  23.     int x0,y0; // левый верхний угол
  24.     int x1,y1; // правый нижний угол
  25.     void input()
  26.     {
  27.         int _x0,_y0,_x1,_y1;
  28.         scanf("%d %d %d %d",&_x0, &_y0, &_x1, &_y1);
  29.         if (_x0 > _x1) swap(_x0,_x1);
  30.         if (_y0 > _y1) swap(_y0,_y1);
  31.         init(_x0,_y0,_x1,_y1);
  32.         Add(X,_x0); Add(X,_x1);
  33.         Add(Y,_y0); Add(Y,_y1);
  34.     }
  35.     void init(int _x0, int _y0, int _x1, int _y1)
  36.     {
  37.         x0 = _x0;
  38.         y0 = _y0;
  39.         x1 = _x1;
  40.         y1 = _y1;
  41.     }
  42.     inline bool isInside(int left, int value, int right)
  43.     {
  44.         return left <= value && value <=right;
  45.     }
  46.     bool isParentFor(const RECT &r)
  47.     {
  48.         return isInside(x0,r.x0,x1) &&
  49.                isInside(x0,r.x1,x1) &&
  50.                isInside(y0,r.y0,y1) &&
  51.                isInside(y0,r.y1,y1);       
  52.     }
  53.     int Square()
  54.     {
  55.         return (x1 - x0) * (y1 - y0);
  56.     }
  57. };
  58. int n;
  59. vector<RECT> rects;
  60. void input()
  61. {
  62.     cin>>n;
  63.     rects.resize(n);
  64.     for (int i=0;i<n;i++)
  65.     {
  66.         RECT rect;
  67.         rect.input();
  68.         rects[i] = rect;
  69.     }
  70. }
  71. void solve()
  72. {
  73.     int totalS = 0;
  74.     RECT curRect;
  75.     for (size_t i=0;i<X.size()-1;i++)
  76.     {
  77.         for (size_t j=0;j<Y.size()-1;j++)
  78.         {
  79.             curRect.init(X[i],Y[j],X[i+1],Y[j+1]);
  80.             for (size_t k=0;k<rects.size();k++)
  81.             {
  82.                 if (rects[k].isParentFor(curRect))
  83.                 {
  84.                     totalS += curRect.Square();
  85.                     break;
  86.                 }
  87.             }
  88.         }
  89.     }
  90.     cout<<totalS;
  91. }
  92. int main()
  93. {
  94.     freopen("input.txt","r",stdin);
  95.     freopen("output.txt","w",stdout);
  96.    
  97.     input();
  98.     solve();
  99.     return 0;
  100. }


Editing is locked.