zoukankan      html  css  js  c++  java
  • 台风

    题目:

    天气预报频道每天从卫星上接受卫星云图。图片被看作是一个矩阵,每个位置上要么是”#”,要么”.”,”#”表示该位置没有云,”.”表示有云,地图上每个位置有多达8个相邻位置,分别是,左上、上、右上、左、右、左下、下、右下8个方向,一块云是由连续的”.”组成。
    例如:下面的卫星云图有4块云:

    #####.#####
    ####.####.#
    ###..##.#.#
    ##...######
    ######.....
    ###########

    如果当云的大小大于等于4的时候会产生台风,那么上图有将会产生2个台风,分别用1和2表示:

    #####1#####
    ####1####.#
    ###11##.#.#
    ##111######
    ######22222
    ###########

    给你一幅卫星云图和形成台风所需云的大小,要你计算出有几个台风以及最大台风的大小。我们用云的大小表示台风的大小。

    分析:

    简单,枚举每一个点,假如是‘.’,那么进行宽搜,向八个方向扩展,加入队列,更新为‘#’。

    再判断是否大于k.......

    操作十分简单,AC。

    code:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,m,k;
     7 int sum;
     8 int ans;
     9 int maxn=-999;
    10 char a[1001][1001];
    11 int ax[1000000];
    12 int ay[1000000];
    13 void bfs(int x,int y) {
    14     int head=0;
    15     int tail=1;
    16     ax[tail]=x;
    17     ay[tail]=y;
    18     int dx[8]= {1,0,-1,0,1,-1,1,-1};
    19     int dy[8]= {0,1,0,-1,1,1,-1,-1};
    20     do {
    21         head++;
    22         for(int i=0; i<8; i++) {
    23             int nx=ax[head]+dx[i];
    24             int ny=ay[head]+dy[i];
    25             if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]=='.') {
    26                 tail++;
    27                 ax[tail]=nx;
    28                 ay[tail]=ny;
    29                 a[nx][ny]='#';
    30                 sum++;
    31             }
    32         }
    33     } while(head<tail);
    34 }
    35 int main() {
    36     freopen("storm.in","r",stdin);
    37     freopen("storm.out","w",stdout);
    38     scanf("%d%d",&n,&m);
    39     for(int i=1; i<=n; i++)
    40         for(int j=1; j<=m; j++)
    41             cin>>a[i][j];
    42     scanf("%d",&k);
    43     for(int i=1; i<=n; i++) {
    44         for(int j=1; j<=m; j++) {
    45             if(a[i][j]=='.') {
    46                 sum=0;
    47                 bfs(i,j);
    48                 if(sum>=k) {
    49                     ans++;
    50                     maxn=max(maxn,sum);
    51                 }
    52             }
    53         }
    54     }
    55     printf("%d %d",ans,maxn);
    56     return 0;
    57 }
  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/ouzijun-OJ/p/11389502.html
Copyright © 2011-2022 走看看