• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
dwtfukgv
博客园    首页    新随笔    联系   管理    订阅  订阅
矩形面积并
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
const int maxn = 100 + 5;

/// 可能 是double
struct node{
    int x1, y1;
    int x2, y2;
};
node a[maxn];
int x[maxn<<1], y[maxn<<1]; /// 存储所有的x, y坐标;
int f[maxn<<2][maxn<<1];

int sum(){
    sort(x, x+n);  sort(y, y+n);
    memset(f, 0, sizeof(f)); /// 在主函数里清0

    for(int h = 0; h < n; ++h)
        for(int i = 0; i < (n << 1); ++i){
            if(x[i] >= a[h].x2)  break;
            for(int j = 0; j < (n << 1); ++j){
                if(y[j] >= a[h].y1)  break;
                if(x[i] >= a[h].x1 && y[j] >= a[h].y2)   f[i][j] = 1;
            }
        }

    int ans = 0;
    for(int i = 0; i < (n << 1); ++i)
        for(int j = 0; j < (n << 1); ++j)
            ans += f[i][j] * (x[i+1]-x[i]) * (y[j+1]-y[j]);
    return ans;
}

int main(){
    int n;
    scanf("%d", &n);
    int indx = 0;
    for(int i = 0; i < n; ++i){
        scanf("%d %d %d %d", &a[i].x1, &a[i].y1, &a[i].x2, &a[i].y2);
        x[indx] = a[i].x1;
        y[indx++] = a[i].y1;
        x[indx] = a[i].x2;
        y[indx++] = a[i].y2;
    }
    sort(x, x+indx);sort(y, y+indx);

    for(int h = 0; h < n; ++h)
       for(int i = 0; i < 2*n; ++i){
          if(x[i] >= a[h].x2)      break;
          for(int j = 0; j < 2*n; ++j){
             if(y[j] >= a[h].y1)   break;
             if(x[i] >= a[h].x1 && y[j] >= a[h].y2){
                f[i][j]=1;
             }
          }
       }

    int area = 0;
    for(int i = 0; i < 2*n; ++i)
       for(int j = 0;j < 2*n; ++j)
          area += f[i][j] * (x[i+1]-x[i]) * (y[j+1]-y[j]);
    printf("%d\n", area);
    return 0;
}

  

posted on 2017-03-31 19:34  dwtfukgv  阅读(114)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3