题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分。坐标值可能有1e9.

分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域个数。后来看别人代码才知道,可以将边界上的点vis赋为1,那么枚举所有哈希后的平面上的点,遇到一个vis=0的点就从这点一直搜过去,搜到边界自动会停止了,因为边界vis=1。所以每次看到一个vis=0的点就ans++,就可以了。真是太弱。。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
#define N 207 vector<int> vx,vy;
map<int,int> hx,hy;
int dx[] = {,,,-};
int dy[] = {,-,,};
int vis[N][N];
int l[],r[],t[],b[]; bool OK(int nx,int ny)
{
if(nx >= && nx <= && ny >= && ny <= && !vis[nx][ny])
return ;
return ;
} void dfs(int x,int y)
{
vis[x][y] = ;
for(int k=;k<;k++)
{
int nx = x + dx[k];
int ny = y + dy[k];
if(OK(nx,ny))
dfs(nx,ny);
}
} int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF && n)
{
vx.clear();vy.clear();
hx.clear();hy.clear();
for(i=;i<n;i++)
{
scanf("%d%d%d%d",&l[i],&t[i],&r[i],&b[i]);
vx.push_back(l[i]);
vx.push_back(r[i]);
vy.push_back(t[i]);
vy.push_back(b[i]);
}
sort(vx.begin(),vx.end());
vx.erase(unique(vx.begin(),vx.end()),vx.end()); //运用STL巧妙去重
sort(vy.begin(),vy.end());
vy.erase(unique(vy.begin(),vy.end()),vy.end());
for(i=;i<vx.size();i++) //以2为间隔,防止出现面积为1的小矩形计算不到的情况
hx[vx[i]] = *i+;
for(i=;i<vy.size();i++)
hy[vy[i]] = *i+;
for(i=;i<n;i++) //离散后的值
{
l[i] = hx[l[i]];
t[i] = hy[t[i]];
r[i] = hx[r[i]];
b[i] = hy[b[i]];
}
memset(vis,,sizeof(vis));
for(i=;i<n;i++) //边界赋值
{
for(j=b[i];j<=t[i];j++)
{
vis[j][l[i]] = ;
vis[j][r[i]] = ;
}
for(j=l[i];j<=r[i];j++)
{
vis[t[i]][j] = ;
vis[b[i]][j] = ;
}
}
int cnt = ;
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(!vis[i][j])
{
cnt++;
dfs(i,j);
}
}
}
printf("%d\n",cnt);
}
return ;
}

最新文章

  1. CSS实现限制显示的字数,超出显示&quot;...&quot;
  2. JDK1.7 ConcurrentHashMap 源码浅析
  3. 简单几何(线段相交)+模拟 POJ 3449 Geometric Shapes
  4. 03 在Linux下安装Myeclipse及Tomcat(含下载)
  5. MVC用户登陆验证及权限检查(Form认证)
  6. main cannot be resolved or is not a field
  7. JVM中的Stack和Heap
  8. NorFlash
  9. POj3421 X-factor Chains(质因数分解+排列组合)
  10. zabbix Lack of free swap space
  11. [js高手之路]构造函数的基本特性与优缺点
  12. NuGet包断线续传下载
  13. &quot;《算法导论》之‘图’&quot;:深度优先搜索、宽度优先搜索(无向图、有向图)
  14. ubuntu环境下安装docker遇到的坑
  15. Kafka命令行操作及常用API
  16. Python字符串操作之字符串分割与组合
  17. 堆与堆排序/Heap&amp;Heap sort
  18. 使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机
  19. [转]Windows 下 Apache Virtual hosts 简单配置
  20. Codeforces Round #Pi (Div. 2)(A,B,C,D)

热门文章

  1. NLog在.NET Core Console Apps中的简单应用
  2. 简单理解JavaScript闭包
  3. SQL对字符串数组的处理
  4. 微信公共平台开发1 .net
  5. ABAP中使用浏览器打开网页
  6. SAP数据更新的触发
  7. Android 首页图片轮播
  8. HBase体系结构剖析
  9. IOS 友盟使用详解
  10. IOS 简单动画 首尾式动画