一种矩形切割的做法:

 1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long LL;
4 const int maxn=1005;
5 struct node{//矩形的结构体
6 LL x1,y1,x2,y2;
7 }a[maxn];
8 int n,cnt=0;
9
10 void Cut(LL id,LL x1,LL y1,LL x2,LL y2){//矩形切割
11 LL k1,k2,k3,k4;
12 k1=max(a[id].x1,x1);
13 k2=min(a[id].x2,x2);
14 k3=min(a[id].y1,y1);
15 k4=max(a[id].y2,y2);
16 if(a[id].x1<k1) a[++cnt]=(node){a[id].x1,a[id].y1,k1,a[id].y2};
17 if(a[id].x2>k2) a[++cnt]=(node){k2,a[id].y1,a[id].x2,a[id].y2};
18 if(a[id].y1>k3) a[++cnt]=(node){k1,a[id].y1,k2,k3};
19 if(a[id].y2<k4) a[++cnt]=(node){k1,k4,k2,a[id].y2};
20 }
21
22 int read(){
23 int x=0,f=1;
24 char c=getchar();
25 while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
26 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
27 return x*f;
28 }
29
30 int main(){
31 n=read();
32 LL x1,y1,x2,y2;
33 x1=read();y1=read();x2=read();y2=read();
34 a[++cnt]=(node){x1,y1,x2,y2};//先加入一个矩形
35 for(int i=2;i<=n;i++){
36 x1=read();y1=read();x2=read();y2=read();
37 for(int j=1;j<=cnt;j++){
38 if(a[j].x1>=x2||a[j].x2<=x1||a[j].y1<=y2||a[j].y2>=y1)continue;
39 Cut(j,x1,y1,x2,y2);//若相交,用当前矩形去切割
40 a[j--]=a[cnt--];//删除原矩形,用最后一个矩形来覆盖它
41 }
42 a[++cnt]=(node){x1,y1,x2,y2};//加入新矩形
43 }
44 LL ans=0;
45 for(int i=1;i<=cnt;i++)
46 ans+=(a[i].x2-a[i].x1)*(a[i].y1-a[i].y2);
47 cout<<ans;
48 }

好像更普遍的解法是扫描线+线段树,这里先留一个坑,以后再来补上这种做法。

洛谷P1884 [USACO12FEB]Overplanting S (矩形切割)的更多相关文章

  1. 洛谷P3045 [USACO12FEB]牛券Cow Coupons

    P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...

  2. 洛谷 P3048 [USACO12FEB]牛的IDCow IDs

    题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...

  3. 洛谷P3048 [USACO12FEB]牛的IDCow IDs

    P3048 [USACO12FEB]牛的IDCow IDs 12通过 67提交 题目提供者lin_toto 标签USACO2012 难度普及/提高- 时空限制1s / 128MB 提交  讨论  题解 ...

  4. 【洛谷 P3187】 [HNOI2007]最小矩形覆盖 (二维凸包,旋转卡壳)

    题目链接 嗯,毒瘤题. 首先有一个结论,就是最小矩形一定有条边和凸包重合.脑补一下就好了. 然后枚举凸包的边,用旋转卡壳维护上顶点.左端点.右端点就好了. 上顶点用叉积,叉积越大三角形面积越大,对应的 ...

  5. 洛谷P3047 [USACO12FEB]Nearby Cows(树形dp)

    P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...

  6. 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows

    P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...

  7. [洛谷P4388] 付公主的矩形

    18.09.09模拟赛T1. 一道数学题. 题目传送门 首先把对角线当成是某个点的移动轨迹,从左下到右上. 那么这个点每上升一个单位长度,就穿过一个格子. 每右移一个单位长度,也会穿过一个格子. 例外 ...

  8. 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)

    题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...

  9. 洛谷P2241-统计方形-矩形内计算长方形和正方形的数量

    洛谷P2241-统计方形 题目描述: 有一个 \(n \times m\) 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 思路: 所有方形的个数=正方形的个数+长方形的个数.对于任意一 ...

随机推荐

  1. WPF 实现用户头像选择器

    制作一个用户头像选择器仿 WeGame 制作一个用户头像选择Canvas为父控件所实现,展示图片使用Image,Path当作上方的蒙版; Canvas:主要用途方便移动Image,设置ClipToBo ...

  2. powershell和cmd对比

    前言 计算机啊这东西,本质上是硬件和软件的综合体.如果只有硬件没有软件的话,这也是台辣鸡而已.而计算机软件中最靠近硬件的一层,就是操作系统层. 操作系统有很多种,比如Unix/Linux/Mac OS ...

  3. 论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement

    论文地址:单耳语音增强的时频注意 引用格式:Zhang Q, Song Q, Ni Z, et al. Time-Frequency Attention for Monaural Speech Enh ...

  4. 成为 Apache 贡献者,从提交第一个简单 PR 开始!

    开源之路,PR 走起 ! ---全球最大同性交友社区 1 fork 以下实例以 incubator-dolphinscheduler 海豚调度为例进行操作 从远端仓库* https://github. ...

  5. BZOJ1176 [Balkan2007]Mokia(CDQ)

    CDQ裸题,\(x\), \(y\), \(tim\)三维偏序 #include <cstdio> #include <iostream> #include <cstri ...

  6. java-Servlet-cookie and session

    1 状态管理 a) 什么是状态管理?将浏览器与web服务器之间多次交互当做一个整体处理,并且将多次交互涉及的数据(即状态)保存下来. b) 如何进行状态管理? 可以将状态保存在客户端将状态保存到浏览器 ...

  7. C++ 虚拟桌面

    C++ 打开一个虚拟桌面的代码 看不明白的地方 请查看demo: http://download.csdn.net/detail/allh45601/7224205 QQ群:103197177 C++ ...

  8. Linux安装JDK并配置环境变量

    Linux - 安装jdk并配置环境变量 1. 前往JDK官网, 地址:https://www.oracle.com/java/technologies/downloads/   复制下载链接 2.  ...

  9. 第二十二篇:有关插槽solt的使用

    1.什么是插槽? 插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示, 父组件可以在这个占位符中填充任何模板代码,如 HTML.组件等,填充的内 ...

  10. 经纬度转换为距离单位km的方法

    function rad(d){ return d * Math.PI /180.0; }; GetDistance(lat1, lng1, lat2, lng2){ var radLat1 =rad ...