zoukankan      html  css  js  c++  java
  • JZOJ 6798. 【2014广州市选day2】regions

    题目大意

    判断给定 (n) 个矩形将平面分成了几个区域。
    (1 leq n leq 50) 坐标 (x,y) 均满足 (0 leq x,y leq 10^6)

    思路

    注意到 (n) 很小
    所以我们直接离散后暴力给坐标系加数表示矩阵的覆盖和重叠
    答案就是连通块的个数
    注意细节

    (Code)

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int n , m , len1 , len2 , cnt , tot;
    int a[55][55] , X[105] , Y[105] , mp[105][105] , used[105][105];
    int fx[4][2] = {{0 , 1} , {1 , 0} , {0 , -1} , {-1 , 0}};
    struct segment{
    	int l , t , r , b;
    }e[55];
    
    void dfs(int x , int y)
    {
    	if (used[x][y]) return;
    	used[x][y] = 1;
    	for(register int i = 0; i < 4; i++)
    	{
    		int xx = x + fx[i][0] , yy = y + fx[i][1];
    		if (xx < 0 || xx > len1 + 1 || yy < 0 || yy > len2 + 1 || mp[xx][yy] != mp[x][y] || used[xx][yy]) continue;
    		dfs(xx , yy);
    	}
    }
    
    int main()
    {
    	freopen("regions.in" , "r" , stdin);
    	freopen("regions.out" , "w" , stdout);
    	scanf("%d" , &n);
    	for(register int i = 1; i <= n; i++) 
    	{
    		scanf("%d%d%d%d" , &e[i].l , &e[i].t , &e[i].r , &e[i].b);
    		X[i] = e[i].l , X[i + n] = e[i].r;
    		Y[i] = e[i].t , Y[i + n] = e[i].b;
    	}
    	m = n * 2;
    	sort(X + 1 , X + m + 1) , sort(Y + 1 , Y + m + 1);
    	len1 = unique(X + 1 , X + m + 1) - X - 1 , len2 = unique(Y + 1 , Y + m + 1) - Y - 1;
    	for(register int i = 1; i <= n; i++)
    	{
    		int l = lower_bound(X + 1 , X + len1 + 1 , e[i].l) - X;
    		int r = lower_bound(X + 1 , X + len1 + 1 , e[i].r) - X;
    		int t = lower_bound(Y + 1 , Y + len2 + 1 , e[i].t) - Y;
    		int b = lower_bound(Y + 1 , Y + len2 + 1 , e[i].b) - Y;
    		tot++;
    		for(register int j = l; j < r; j++)
    			for(register int k = b; k < t; k++)
    				mp[j][k] += tot;
    	}
    	for(register int i = 0; i <= len1 + 1; i++)
    		for(register int j = 0; j <= len2 + 1; j++)
    		if (!used[i][j]) ++cnt , dfs(i , j);
    	printf("%d" , cnt);
    }
    
  • 相关阅读:
    Java中JDK,JRE和JVM之间的关系-(转载)
    linux(Ubuntu)安装QQ2013(转)
    Java-寻找矩阵连通域个数
    Linux 安装 python IDE
    Java学习笔记-数组与容器间的转制-asList
    由LCS到编辑距离—动态规划入门—算法学习笔记
    Java学习笔记-策略模式
    Java学习笔记-模板方法模式
    Java学习笔记-迭代器模式
    Java学习笔记-Collections.sort详解
  • 原文地址:https://www.cnblogs.com/leiyuanze/p/13657298.html
Copyright © 2011-2022 走看看