17:最好的草

时间:2022-05-07
本文章向大家介绍17:最好的草,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

17:最好的草

总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB描述

奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。它想计算一下牧场中的草丛数量。

在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场地图,计算有多少个草丛。

例如,考虑如下5行6列的牧场地图

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

这个牧场有5个草丛:一个在第一行,一个在第二列横跨了二、三行,一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。

输入第一行包含两个整数R和C,中间用单个空格隔开。 接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1 <= R, C <= 100 )输出输出一个整数,表示草丛数。样例输入

5 6
.#....
..#...
..#..#
...##.
.#....

样例输出

5

来源USACO Open 2008 Bronze

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 using namespace std;
 5 char a[1001][1001];
 6 int now=1;
 7 int m_tot=0;
 8 int z_tot=0;
 9 int ans=0;
10 int main() 
11 {
12     int n,m;
13     cin>>n>>m;
14     for(int i=0;i<n;i++)
15     {
16         for(int j=0;j<m;j++)
17         {
18             cin>>a[i][j];
19         }
20     }
21     for(int i=0;i<n;i++)
22     {
23         for(int j=0;j<m;j++)
24         {
25             if(a[i][j]=='#')
26             {
27                 if(a[i+1][j]=='#')
28                 {
29                     a[i][j]='.';
30                     a[i+1][j]='.';
31                     ans++;
32                 }
33                 else if(a[i-1][j]=='#')
34                 {
35                     a[i][j]='.';
36                     a[i+1][j]='.';
37                     ans++;
38                 }
39                 else if(a[i][j+1]=='#')
40                 {
41                     a[i][j]='.';
42                     a[i][j+1]='.';
43                     ans++;
44                 }
45                 else if(a[i][j-1]=='#')
46                 {
47                     a[i][j]='.';
48                     a[i+1][j]='.';
49                     ans++;
50                 }
51                 else
52                 {
53                     a[i][j]='.';
54                     ans++;
55                 }
56             }
57         }
58     }
59     cout<<ans;
60     return 0;
61 }