当前位置:网站首页>[UVALive 6663 Count the Regions] (dfs + 离散化)[通俗易懂]
[UVALive 6663 Count the Regions] (dfs + 离散化)[通俗易懂]
2022-07-07 20:58:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
题目大意:
在一个平面上有 n (1<=n<=50) 个矩形。给你左上角和右下角的坐标(0<=x<=10^6, 0<=y<=10^6)。问这些矩形将该平面划分为多少块。
解题思路:
因为n非常小,能够对整个图进行压缩。仅仅要不改变每条边的相对位置。对答案没有影响。
能够将这些矩形的坐标离散化,然后把边上的点标记一下。之后进行简单dfs就可以。(注意离散化的时候,两条边之间至少要隔一个距离)
代码:
/*
ID: [email protected]
PROG:
LANG: C++
*/
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<fstream>
#include<cstring>
#include<ctype.h>
#include<iostream>
#include<algorithm>
#define INF (1<<30)
#define PI acos(-1.0)
#define mem(a, b) memset(a, b, sizeof(a))
#define For(i, n) for (int i = 0; i < n; i++)
using namespace std;
const int MOD = 1000000007;
typedef long long ll;
using namespace std;
struct node {
int a, b, c, d;
} rec[600];
int x[1200], y[1200];
int xp[1000100], yp[1000100];
int mp[240][240], n;
int lx, ly;
void gao() {
for (int i = 0; i < n; i++) {
int A = xp[rec[i].a];
int B = yp[rec[i].b];
int C = xp[rec[i].c];
int D = yp[rec[i].d];
for (int j = A; j <= C; j++) mp[j][D] = mp[j][B] = 1;
for (int j = D; j <= B; j++) mp[A][j] = mp[C][j] = 1;
}
}
int dir[4][2] = {{0, -1}, {0, 1}, {1, 0}, { -1, 0}};
bool in(int x, int y) {
return (x >= 0 && y >= 0 && x < 2 * lx + 1 && y < 2 * ly + 1);
}
void dfs(int x, int y) {
mp[x][y] = 1;
for (int i = 0; i < 4; i++) {
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (in(xx, yy) && !mp[xx][yy]) {
dfs(xx, yy);
}
}
}
int main() {
while(scanf("%d", &n) != EOF && n) {
for (int i = 0; i < n; i++) {
scanf("%d%d%d%d", &rec[i].a, &rec[i].b, &rec[i].c, &rec[i].d);
x[2 * i] = rec[i].a;
x[2 * i + 1] = rec[i].c;
y[2 * i] = rec[i].b;
y[2 * i + 1] = rec[i].d;
}
sort(x, x + 2 * n);
sort(y, y + 2 * n);
lx = unique(x, x + 2 * n) - x;
ly = unique(y, y + 2 * n) - y;
for (int i = 0; i < lx; i++) {
xp[x[i]] = 2 * i + 1;
}
for (int j = 0; j < ly; j++) {
yp[y[j]] = 2 * j + 1;
}
memset(mp, 0, sizeof(mp));
gao();
int fk = 0;
for (int i = 0; i < 2 * lx; i++) {
for (int j = 0; j < 2 * ly; j++) if (mp[i][j] == 0) {
dfs(i, j);
fk++;
}
}
cout << fk << endl;
}
return 0;
}发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116289.html原文链接:https://javaforall.cn
边栏推荐
- Cantata9.0 | new features
- I Basic concepts
- CodeSonar如何帮助无人机查找软件缺陷?
- 复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算
- Small guide for rapid formation of manipulator (11): standard nomenclature of coordinate system
- Onespin | solve the problems of hardware Trojan horse and security trust in IC Design
- Flask1.1.4 werkzeug1.0.1 source code analysis: Routing
- You want to kill a port process, but you can't find it in the service list. You can find this process and kill it through the command line to reduce restarting the computer and find the root cause of
- Airiot helps the urban pipe gallery project, and smart IOT guards the lifeline of the city
- 使用枚举实现英文转盲文
猜你喜欢
Klocwork 代码静态分析工具

Apifox 接口一体化管理新神器

万字总结数据存储,三大知识点
![Is embedded system really safe? [how does onespin comprehensively solve the IC integrity problem for the development team]](/img/af/61b384b1b6ba46aa1a6011f8a30085.png)
Is embedded system really safe? [how does onespin comprehensively solve the IC integrity problem for the development team]

神兵利器——敏感文件发现工具

智能软件分析平台Embold

Optimization cases of complex factor calculation: deep imbalance, buying and selling pressure index, volatility calculation
Klocwork code static analysis tool

Helix QAC 2020.2 new static test tool maximizes the coverage of standard compliance

Cantata9.0 | 全 新 功 能
随机推荐
写一下跳表
神兵利器——敏感文件发现工具
【矩阵乘】【NOI 2012】【cogs963】随机数生成器
恶魔奶爸 A3阶段 近常速语流初接触
CodeSonar通过创新型静态分析增强软件可靠性
HDU4876ZCC loves cards(多校题)
C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)
Deep learning model compression and acceleration technology (VII): mixed mode
凌云出海记 | 易点天下&华为云:推动中国电商企业品牌全球化
如何满足医疗设备对安全性和保密性的双重需求?
C language helps you understand pointers from multiple perspectives (1. Character pointers 2. Array pointers and pointer arrays, array parameter passing and pointer parameter passing 3. Function point
Codeforces round 296 (Div. 2) A. playing with paper[easy to understand]
Jetty:配置连接器[通俗易懂]
Static analysis of software defects codesonar 5.2 release
How to meet the dual needs of security and confidentiality of medical devices?
开户必须往账户里面赚钱吗,资金安全吗?
寫一下跳錶
Helix QAC 2020.2新版静态测试工具,最大限度扩展了标准合规性的覆盖范围
使用枚举实现英文转盲文
How does codesonar help UAVs find software defects?