hdu多校第八场 1009 (hdu6665) Calabash and Landlord 计算几何/dfs
题意:
给定两个矩形,输出这两个矩形把平面分成了多少块。
题解:
本来是道计算几何的大讨论,被我生生写成了bfs。
离散化边,注意不重合的边中间要空出来一格,四周也要空出来一圈,然后暴力bfs计算一共有几块即可。
不这么暴力的方法倒也不是没有,观察下图,点与长方形的关系存在如下25种,那么两点确定一个长方形,两个长方形的关系则共有625种
至于这个表怎么打,好像还得借助一下bfs。

#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
int mapp[][];
int x[],y[];
const int changex[]={,,,-};
const int changey[]={,-,,};
void lsh(int *a){
int b[];
bool flag[]={};
b[]=a[];b[]=a[];b[]=a[];b[]=a[];
sort(b+,b+);
int l=unique(b+,b+)-b-;
for(int i=;i<=l;i++){
for(int j=;j<=;j++){
if(a[j]==b[i] && flag[j]==){
a[j]=*i;
flag[j]=;
}
}
}
return ;
}
int solve(){
int ans=;
memset(mapp,,sizeof mapp);
// printf("a:%d %d %d %d\n",x[1],y[1],x[2],y[2]);
// printf("b:%d %d %d %d\n",x[3],y[3],x[4],y[4]);
for(int i=;i<=;i++){
for(int j=;j<=;j++){
if((i==x[] || i==x[]) && j>=y[] && j<=y[]){
mapp[i][j]=-;
}
if((j==y[] || j==y[]) && i>=x[] && i<=x[]){
mapp[i][j]=-;
}
if((i==x[] || i==x[]) && j>=y[] && j<=y[]){
mapp[i][j]=-;
}
if((j==y[] || j==y[]) && i>=x[] && i<=x[]){
mapp[i][j]=-;
}
}
} // for(int i=1;i<=10;i++){
// for(int j=1;j<=10;j++){
// printf("%c ",mapp[i][j]==-1?'*':mapp[i][j]+'0');
// }
// printf("\n");
// }
//
queue<int> qx,qy;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
if(mapp[i][j]==){
ans++;
mapp[i][j]=ans;
qx.push(i);
qy.push(j);
}
while(!qx.empty()){
int xx=qx.front();
int yy=qy.front();
qx.pop();qy.pop();
// printf("%d %d:",xx,yy);
for(int k=;k<;k++){
int xxx=xx+changex[k];
int yyy=yy+changey[k];
// printf("%d %d ",xxx,yyy);
if(xxx>= && xxx<= && yyy>= && yyy<= && mapp[xxx][yyy]==){
qx.push(xxx);
qy.push(yyy);
mapp[xxx][yyy]=ans;
}
}
// printf("\n");
}
// for(int i=1;i<=10;i++){
// for(int j=1;j<=10;j++){
// printf("%c ",mapp[i][j]==-1?'*':mapp[i][j]+'0');
// }
// printf("\n");
// }
}
}
return ans;
}
int main(){ int t;
scanf("%d",&t);
while(t--){
scanf("%d %d %d %d",&x[],&y[],&x[],&y[]);
scanf("%d %d %d %d",&x[],&y[],&x[],&y[]);
lsh(x);lsh(y);
printf("%d\n",solve());
// for(int i=1;i<=10;i++){
// for(int j=1;j<=10;j++){
// printf("%c ",mapp[i][j]==-1?'*':mapp[i][j]+'0');
// }
// printf("\n");
// }
}
}
hdu多校第八场 1009 (hdu6665) Calabash and Landlord 计算几何/dfs的更多相关文章
- 2014 HDU多校弟八场H题 【找规律把】
看了解题报告,发现看不懂 QAQ 比较简单的解释是这样的: 可以先暴力下达标,然后会发现当前数 和 上一个数 的差值是一个 固定值, 而且等于当前数与i(第i个数)的商, 于是没有规律的部分暴力解决, ...
- hdu多校第八场Parentheses Matrix
#include<bits/stdc++.h> using namespace std; ][]; int main() { int t; scanf("%d",&am ...
- hdu多校第十场 1009 (hdu6699) Block Breaker bfs/模拟
题意: 紧密排列的方块因为摩擦力一个一个稳定地挤在一起,但当一个方块的四个邻居中,上下两个至少空缺一个,左右两个至少空缺一个,则这个方块也将掉落. 每次锤掉一个方块,求多少个方块受牵连落下. 题解: ...
- hdu多校第八场 1011 (hdu6667) Roundgod and Milk Tea 二分图匹配
题意: 有若干个班,每个班有些人要喝奶茶,也提供一些奶茶,一人喝一杯,但是自己班的人不能喝自己班的奶茶,求最多能有多少人喝上奶茶. 题解: 典型的二分图匹配问题,学生在左,奶茶在右,学生和非自己班的奶 ...
- hdu多校第八场 1010(hdu6666) Quailty and CCPC 排序/签到
题意: CCPC前10%能得金牌,给定队伍解题数和罚时,问你有没有一个队伍如果向上取整就金了,四舍五入就银了. 题解: 排序后按题意求解即可. #include<iostream> #in ...
- hdu多校第八场 1003 (hdu6659) Acesrc and Good Numbers 数论/打表
题意: 对于某数k,若数字d在1-k中出现次数恰好为k,则称k为好数. 给定d,x,求x以内,对于d而言最大的好数.k范围1e18. 题解: 打表二分即可. 但是,1e18的表是没法打出来的,只能在o ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 2019牛客多校第八场 F题 Flowers 计算几何+线段树
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...
随机推荐
- [bzoj2839]集合计数 题解 (组合数+容斥)
Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模1000000007 ...
- Rop攻击
参考:http://en.wikipedia.org/wiki/Return-oriented_programming Rop全称Return-Oriented Programming,就是对栈上的返 ...
- Error: EBUSY: resource busy or locked, symlink "xxx" 的解决方法
上面是报错信息. 解决方法:当我们在npm i 安装依赖的时候,会遇到这个Error: EBUSY: resource busy or locked, symlink....的问题.解决的 办法就是关 ...
- 回退ios版本
https://ipsw.me/ 访问以上网址,选择自己对应的手机,选择可下载的版本数据,打开itunes,自动备份数据,然后按住alt+左键点击恢复... 成功后. 然后进行备份自己的之前备份的数据 ...
- Centos光盘ISO安装过程再理解
ISO启动时的基本流程 vmlinuz -> 加载initrd.img -> 加载内核基本驱动 -> 挂载光盘至/run/install/repo -> 启动anaconda ...
- Redis数据结构之压缩列表-ziplist
为了节约内存,在zset和hash容器对象元素个数较少时,Redis会采用压缩列表(ziplist)进行存储. 压缩列表是一块连续的内存空间,元素之间紧挨着存储,不存在冗余 一个压缩列表可以包含任意多 ...
- hdu 6435 /// 状压
题目大意: 给定 n m k 为 n种主武器 m种副武器 武器有k种属性 接下来n行 先给定当前主武器的综合分s1 再给定k种属性的值 接下来m行 先给定当前副武器的综合分s2 再给定k种属性的值 要 ...
- Linux编程获取本机IP地址
使用函数getifaddrs来枚举网卡IP,当中使用到的结构体例如以下所看到的: struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in ...
- mysql 记录(record)
以下内容来源于<mysql内核:Innodb存储引擎 卷1> 简单介绍物理记录和大记录.仅为理解mysql 索引基础 存储结构这一章节而写. mysql的默认存储引擎为Innodb.Inn ...
- springboot中引用配置文件中的参数
首先可以看到这是做微信登陆时候的配置,一般不会写死都是通过配置文件获取,所以,记载配置文件中 那么怎么引用呢: 可以看到直接注入的方式就可以引用了,所以看下面: 进行页面跳转,并且带有参数的, 使用m ...