洛谷P1884 [USACO12FEB]Overplanting S (矩形切割)
一种矩形切割的做法:
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 (矩形切割)的更多相关文章
- 洛谷P3045 [USACO12FEB]牛券Cow Coupons
P3045 [USACO12FEB]牛券Cow Coupons 71通过 248提交 题目提供者洛谷OnlineJudge 标签USACO2012云端 难度提高+/省选- 时空限制1s / 128MB ...
- 洛谷 P3048 [USACO12FEB]牛的IDCow IDs
题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...
- 洛谷P3048 [USACO12FEB]牛的IDCow IDs
P3048 [USACO12FEB]牛的IDCow IDs 12通过 67提交 题目提供者lin_toto 标签USACO2012 难度普及/提高- 时空限制1s / 128MB 提交 讨论 题解 ...
- 【洛谷 P3187】 [HNOI2007]最小矩形覆盖 (二维凸包,旋转卡壳)
题目链接 嗯,毒瘤题. 首先有一个结论,就是最小矩形一定有条边和凸包重合.脑补一下就好了. 然后枚举凸包的边,用旋转卡壳维护上顶点.左端点.右端点就好了. 上顶点用叉积,叉积越大三角形面积越大,对应的 ...
- 洛谷P3047 [USACO12FEB]Nearby Cows(树形dp)
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
- 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows
P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...
- [洛谷P4388] 付公主的矩形
18.09.09模拟赛T1. 一道数学题. 题目传送门 首先把对角线当成是某个点的移动轨迹,从左下到右上. 那么这个点每上升一个单位长度,就穿过一个格子. 每右移一个单位长度,也会穿过一个格子. 例外 ...
- 洛谷 P3187 BZOJ 1185 [HNOI2007]最小矩形覆盖 (旋转卡壳)
题目链接: 洛谷 P3187 [HNOI2007]最小矩形覆盖 BZOJ 1185: [HNOI2007]最小矩形覆盖 Description 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形, ...
- 洛谷P2241-统计方形-矩形内计算长方形和正方形的数量
洛谷P2241-统计方形 题目描述: 有一个 \(n \times m\) 方格的棋盘,求其方格包含多少正方形.长方形(不包含正方形). 思路: 所有方形的个数=正方形的个数+长方形的个数.对于任意一 ...
随机推荐
- 第二十天python3 正则表达式
正则表达式 Regular Expression,缩写为regex.regexp.RE等:分类 1.BRE 基本正则表达式,grep.sed.vi等软件支持,vim有扩展: 2.ERE 扩展正则表达式 ...
- 企业级数据治理工作怎么开展?Datahub这样做
大数据发展到今天,扮演了越来越重要的作用.数据可以为各种组织和企业提供关键决策的支持,也可以通过数据分析帮助发现更多的有价值的东西,如商机.风险等等. 在数据治理工作开展的时候,往往会有一个专门负责数 ...
- Vue3 生命周期 && Hooks封装 && toRef
1 # 一.Vue3.0与Vue2.0生命周期改动 2 beforDestroy改名为beforeUnmount 3 destroyed改名为unmounted 4 # Vue3.0页提供了Compo ...
- Odoo14 防暴力破解登录密码
1 # Odoo14 防暴力破解登录密码 2 # 主要工具:redis 3 # 实现思路:限制每个用户24小时内登录失败次数.连续超过5次失败后,需要等待一定时间后才能再次尝试登录 4 # 配置:在你 ...
- SQL中 Decode 和 Sign 语法的简单用法
含义解释:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN R ...
- typora的第一天
一级标题 二级标题 三级标题 ..... 表格 java spring mybatis 代码 java代码 public void Hello(){ } 字体 hello word! hello wo ...
- 我与Apache DolphinScheduler社区的故事
我与DolphinScheduler社区的故事 Apache DolphinScheduler 是一个开源的分布式去中心化.易扩展的可视化DAG大数据调度系统. 于2017年在易观数科立项,2019年 ...
- Luogu2801 教主的魔法 (分块)
与hzw的分块2类似,放vector排序 #include <iostream> #include <cstdio> #include <cstring> #inc ...
- Linux 04 用户文件
参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 概述 完成用户管 ...
- 搞定面试官 - 可以介绍一下在 MySQL 中你平时是怎么使用 COUNT() 的嘛?
大家好,我是程序员啊粥. 相信在大家的工作中,有很多的功能都需要用到 count(*) 来统计表中的数据行数.同时,对于一些大数据的表,用 count 都是瑟瑟发抖,往往会结合缓存等进行处理. 那么, ...