一种矩形切割的做法:

 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. 性能浪费的日志案例和使用Lambda优化日志案例

    有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费.而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能 性能浪费的日志案例 日志可以帮助我们快速的定位问题,记录程序运行过程中的 ...

  2. 表单中设置了 `keyup.enter.native` 的按键事件,但是回车后没有执行查询,反而会刷新页面

    场景 添加属性对话框中,input输入后点击 enter,不会执行绑定的 handleDialogQuery 事件,反而会刷新整个页面: 如果不点击 enter,点击搜索按钮,则是正常的. 又测试:在 ...

  3. docker for windows无法共享硬盘

    最近在一次win10安装docker的过程中无法共享D盘.每次一点击共享就出现如下 经过网上搜索后,有反馈是防火墙的问题,结果关掉防火墙还是无法改善,查找日志 因为无法判断是什么server服务,故又 ...

  4. mysql导出bug备注

    注:yiicms库和area表均存在

  5. 鲜衣怒马散尽千金,Vue3.0+Tornado6前后端分离集成Web3.0之Metamask钱包区块链虚拟货币三方支付功能

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_219 不得不承认,大多数人并不拥有或者曾经拥有加密货币.是的,Web3.0.加密货币.区块链,对于大多数的互联网用户来说,其实是一 ...

  6. JavaScript 里三个点 ...,可不是省略号啊···

    摘要:Three dots ( - ) in JavaScript. 本文分享自华为云社区<JavaScript 里三个点 ... 的用法>,作者: Jerry Wang . Rest P ...

  7. Docker 03 镜像命令

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  8. linux设置系统环境变量的天坑

    在设置系统环境变量,也就是 .bash_profile 或者 /etc/proflie 或者 .bashrc 中把path写错或者是把设置系统环境变量的格式写错! 会 导致 系统无法进入.登录无限循环 ...

  9. leetcode之二叉树

    专题:二叉树遍历 987. 二叉树的垂序遍历 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列. 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row ...

  10. Mybatis 插件使用及源码分析

    Mybatis 插件 Mybatis插件主要是通过JDK动态代理实现的,插件可以针对接口中的方法进行代理增强,在Mybatis中比较重要的接口如下: Executor :sql执行器,包含多个实现类, ...