zoukankan      html  css  js  c++  java
  • 区域的个数

    • 问题描述: w*h的格子上画了n条或垂直或水平的宽度为1的直线,求这些直线将格子划分成了多少个区域。
    • 限制条件:
      1≤w,h≤1000000
      1≤n≤500
    • 题解:这题的关键在于我们没法创建w*h的数组,因为太大了,所以要进行坐标离散化,数组里只需要存储有直线的行列以及其前后的行列就足够了,这样的话6n*6n的空间就可以了。
    • 代码:
        1 #include <cstdio>
        2 #include <cctype>
        3 #include <algorithm>
        4 #include <cmath>
        5 #include <cstring>
        6 #include <vector>
        7 #include <queue>
        8 #include <utility>
        9 #define number s-'0'
       10 
       11 using namespace std;
       12 
       13 const int MAX_N=600;
       14 const long long INF=0x3f3f3f3f;
       15 const int dx[4]{-1,0,0,1};
       16 const int dy[4]{0,1,-1,0};
       17 int N,H,W;
       18 int X1[MAX_N],X2[MAX_N],Y1[MAX_N],Y2[MAX_N];
       19 bool fld[MAX_N*6][MAX_N*6];
       20 
       21 void read(int &x){
       22     char s;
       23     x=0;
       24     bool flag=0;
       25     while(!isdigit(s=getchar()))
       26         (s=='-')&&(flag=true);
       27     for(x=number;isdigit(s=getchar());x=x*10+number);
       28     (flag)&&(x=-x);
       29 }
       30 
       31 void write(int x)
       32 {
       33     if(x<0)
       34     {
       35         putchar('-');
       36         x=-x;
       37     }
       38     if(x>9)
       39         write(x/10);
       40     putchar(x%10+'0');
       41 }
       42 
       43 int compress(int *x1, int *x2, int w);
       44 
       45 int main()
       46 {
       47     read(W);read(H);read(N);
       48     for (int i=0; i<N; i++)
       49     {
       50         read(X1[i]);read(Y1[i]);
       51         read(X2[i]);read(Y2[i]);
       52     }
       53     W=compress(X1, X2, W);
       54     H=compress(Y1, Y2, H);
       55     memset(fld, 0, sizeof(fld));
       56     for (int i=0; i<N; i++)
       57         for (int y=Y1[i]; y<=Y2[i]; y++)
       58             for (int x=X1[i]; x<=X2[i]; x++)
       59                 fld[y][x]=true;
       60     int ans=0;
       61     for (int y=0; y<H; y++)
       62     {
       63         for (int x=0; x<W; x++)
       64         {
       65             if (fld[x][y]) continue;
       66             ans++;
       67             queue<pair<int, int>> que;
       68             que.push(make_pair(x,y));
       69             while (!que.empty())
       70             {
       71                 int sx=que.front().first, sy=que.front().second;
       72                 que.pop();
       73                 for (int i=0; i<4; i++)
       74                 {
       75                     int tx=sx+dx[i], ty=sy+dy[i];
       76                     if (tx<0 || tx>=W || ty<0 || ty>=H) continue;
       77                     if (fld[tx][ty]) continue;
       78                     que.push(make_pair(tx,ty));
       79                     fld[tx][ty]=true;
       80                 }
       81             }
       82         }
       83     }
       84     write(ans);
       85     putchar('
      ');
       86 }
       87 
       88 int compress(int *x1, int *x2, int w)
       89 {
       90     vector<int> xs;
       91     for (int i=0; i<N; i++)
       92     {
       93         for (int d=-1; d<=1; d++)
       94         {
       95             int tx1=x1[i]+d, tx2=x2[i]+d;
       96             if (1<=tx1 && tx1<=w) xs.push_back(tx1);
       97             if (1<=tx2 && tx2<=w) xs.push_back(tx2);
       98         }
       99     }
      100     sort(xs.begin(),xs.end());
      101     xs.erase(unique(xs.begin(),xs.end()),xs.end());
      102     for (int i=0; i<N; i++)
      103     {
      104         x1[i]=find(xs.begin(), xs.end(), x1[i])-xs.begin();
      105         x2[i]=find(xs.begin(), xs.end(), x2[i])-xs.begin();
      106     }
      107     return xs.size();
      108 }
  • 相关阅读:
    WordPress错误:无法启用插件,因为它引起了一个致命错误
    快速使用 Thinkphp 之一: 准备工作-配置PHP环境及下载Thinkphp文件
    基于XML文件格式引用页面
    PHP清除html、css、js格式并去除空格的PHP函数
    本地无法启动MySQL服务,报的错误:1067,进程意外终止
    快速使用 Thinkphp 之二: 创建自己的应用项目
    HTML页面里加载flash文件源码
    【学习笔记】数据库 windrainpy
    【转】给年轻程序员的建议 windrainpy
    【转】js变量以及其作用域详解 windrainpy
  • 原文地址:https://www.cnblogs.com/Ymir-TaoMee/p/9509630.html
Copyright © 2011-2022 走看看