Advertisement
bartekltg

Untitled

Nov 23rd, 2012
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1.  
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. class prostokat
  10. {
  11. private:
  12.     int x1,y1,x2,y2;
  13. public:
  14.     prostokat()
  15.     { x1=0; y1=0; x2=0; y2=0;  }
  16.     prostokat(int X1, int Y1, int X2 , int Y2)
  17.     { x1=X1; y1=Y1; x2=X2; y2=Y2; }
  18.     long long int pole() { return ((long long int)(x2-x1)*(y2-y1)); }
  19.     friend prostokat operator* (prostokat, prostokat);
  20. };
  21.  
  22.  prostokat operator* (prostokat A, prostokat B)
  23. {
  24.     int x1,y1,x2,y2;
  25.     x1=max(A.x1,B.x1);
  26.     x2=min(A.x2,B.x2);
  27.     y1=max(A.y1,B.y1);
  28.     y2=min(A.y2,B.y2);
  29.     if ((x2>=x1)&&(y2>=y1))
  30.     {
  31.         return prostokat(x1,y1,x2,y2);
  32.     }else
  33.     {
  34.         return prostokat(0,0,0,0);
  35.     }
  36. }
  37.  
  38.  
  39.  
  40. int main()
  41. {
  42.     int n;
  43.     scanf("%d",&n);
  44.  
  45.     vector< prostokat > prostokaty(n);
  46.     vector< prostokat > pros_pr(n);//iloczyny prostokątów od 0 do i-tego
  47.     vector< prostokat > pros_lew(n);//iloczyny prostokątów od ostatniego do i-tego
  48.     vector< prostokat > wyniki(n);//prostokąt będący iloczynem wszytkich poza i-tym
  49.  
  50.     for (int i=0;i<n;i++)
  51.     {
  52.         int x1,y1,x2,y2;
  53.         scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
  54.         prostokaty[i]=prostokat(x1,y1,x2,y2);
  55.     }
  56.  
  57.     pros_pr[0]=prostokaty[0];
  58.     for (int i=1;i<n;i++)
  59.     {
  60.         pros_pr[i]=pros_pr[i-1]*prostokaty[i];
  61.     }
  62.    
  63.     pros_lew[n-1]=prostokaty[n-1];
  64.     for (int i=n-2;i>=0;i--)
  65.     {
  66.         pros_lew[i]=pros_lew[i+1]*prostokaty[i];
  67.     }
  68.  
  69.     wyniki[0]= pros_lew[1];
  70.     wyniki[n-1]= pros_pr[n-2];
  71.  
  72.     for (int i=1;i<n-1;i++)
  73.     {
  74.         wyniki[i]=pros_pr[i-1]*pros_lew[i+1];
  75.     }
  76.  
  77.     long long int wynik=0;
  78.     for (int i=0;i<n;i++)
  79.     {
  80.         wynik+=wyniki[i].pole();
  81.     }
  82.     wynik-=pros_lew[0].pole()*(n-1);
  83.  
  84.     printf("%lld\n",wynik);
  85.     return 0;
  86.  
  87.    
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement