Advertisement
MarioYC

Selectivo 2 - P5

Sep 2nd, 2012
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. int main(){
  10.     int tc = 1,n;
  11.     double x1[100],y1[100],x2[100],y2[100];
  12.     vector<double> vx,vy;
  13.     bool M[200][200];
  14.    
  15.     while(true){
  16.         cin >> n;
  17.         if(n == 0) break;
  18.        
  19.         vx.clear();
  20.         vy.clear();
  21.        
  22.         for(int i = 0;i < n;++i){
  23.             cin >> x1[i] >> y1[i] >> x2[i] >> y2[i];
  24.             vx.push_back(x1[i]);
  25.             vx.push_back(x2[i]);
  26.             vy.push_back(y1[i]);
  27.             vy.push_back(y2[i]);
  28.         }
  29.        
  30.         sort(vx.begin(),vx.end());
  31.         sort(vy.begin(),vy.end());
  32.        
  33.         int nx = unique(vx.begin(),vx.end()) - vx.begin();
  34.         int ny = unique(vy.begin(),vy.end()) - vy.begin();
  35.        
  36.         memset(M,0,sizeof M);
  37.        
  38.         for(int k = 0;k < n;++k)
  39.             for(int i = 0;i + 1 < nx;++i)
  40.                 for(int j = 0;j + 1 < ny;++j)
  41.                     if(x1[k] <= vx[i] && vx[i + 1] <= x2[k] && y1[k] <= vy[j] && vy[j + 1] <= y2[k])
  42.                         M[i][j] = true;
  43.        
  44.         double ans = 0;
  45.        
  46.         for(int i = 0;i + 1 < nx;++i)
  47.             for(int j = 0;j + 1 < ny;++j)
  48.                 if(M[i][j])
  49.                     ans += (vx[i + 1] - vx[i]) * (vy[j + 1] - vy[j]);
  50.        
  51.         printf("Test case #%d\n",tc++);
  52.         printf("Total explored area: %.2f\n\n",ans);
  53.     }
  54.    
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement