当前位置:网站首页>[uvalive 6663 count the regions] (DFS + discretization) [easy to understand]
[uvalive 6663 count the regions] (DFS + discretization) [easy to understand]
2022-07-07 20:59:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack .
The main idea of the topic :
There are... On a plane n (1<=n<=50) A rectangle . Give you the coordinates of the upper left corner and the lower right corner (0<=x<=10^6, 0<=y<=10^6). Ask how many blocks these rectangles divide the plane .
Their thinking :
because n A very small , It can compress the whole graph . Just don't change the relative position of each side . It has no effect on the answer .
The coordinates of these rectangles can be discretized , Then mark the dot on the side . After that, simple dfs Can .( Pay attention to discretization , There should be at least a distance between the two sides )
Code :
/*
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;
}Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/116289.html Link to the original text :https://javaforall.cn
边栏推荐
猜你喜欢

解决使用uni-app MediaError MediaError ErrorCode -5

Measure the height of the building

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

复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算

最新版本的CodeSonar改进了功能安全性,支持MISRA,C ++解析和可视化

使用高斯Redis实现二级索引

How to meet the dual needs of security and confidentiality of medical devices?

How to meet the dual needs of security and confidentiality of medical devices?

如何满足医疗设备对安全性和保密性的双重需求?

神兵利器——敏感文件发现工具
随机推荐
Dachang classic pointer written test questions
复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算
想杀死某个端口进程,但在服务列表中却找不到,可以之间通过命令行找到这个进程并杀死该进程,减少重启电脑和找到问题根源。
Update iteration summary of target detection based on deep learning (continuous update ing)
SQL注入报错注入函数图文详解
HDU4876ZCC loves cards(多校题)
刚开户的能买什么股票呢?炒股账户安全吗
Apifox interface integrated management new artifact
Small guide for rapid formation of manipulator (12): inverse kinematics analysis
使用高斯Redis实现二级索引
寫一下跳錶
Codeforces Round #296 (Div. 2) A. Playing with Paper[通俗易懂]
Flask1.1.4 werkzeug1.0.1 source code analysis: Routing
How to meet the dual needs of security and confidentiality of medical devices?
Referrer和Referrer-Policy简介
C语言多角度帮助你深入理解指针(1. 字符指针2. 数组指针和 指针数组 、数组传参和指针传参3. 函数指针4. 函数指针数组5. 指向函数指针数组的指针6. 回调函数)
Mysql子查询关键字的使用方式(exists)
95年专注安全这一件事 沃尔沃未来聚焦智能驾驶与电气化领域安全
OneSpin 360 DV新版发布,刷新FPGA形式化验证功能体验
Cocos2d-x game archive [easy to understand]