赞
踩
小蓝负责花园的灌溉工作。
花园可以看成一个 nn 行 mm 列的方格图形。中间有一部分位置上安装有出水管。
小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。
每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。
给定花园水管的位置,请问 kk 分钟后,有多少个方格被灌溉好?
输入描述
输入的第一行包含两个整数 n,mn,m。
第二行包含一个整数 tt,表示出水管的数量。
接下来 tt 行描述出水管的位置,其中第 ii 行包含两个数 r,cr,c 表示第 rr 行第 cc 列有一个排水管。
接下来一行包含一个整数 kk。
其中,1≤n,m≤100,1≤t≤10,1≤k≤1001≤n,m≤100,1≤t≤10,1≤k≤100。
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
- 3 6
- 2
- 2 2
- 3 4
- 1
输出
9
运行限制
读懂题意了这道题不难。注意的是每过一分钟,出水口上下左右四个方格就会住满水。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main(int argc, char *argv[]) {
- int m,n;
- int a[101][101] = {0};
- int b[101][101] = {0};
- scanf("%d%d",&m,&n);
-
- int t;
- int k;
- scanf("%d",&t);
- int r,c;
- for(int i = 0; i<t; i++) {
- scanf("%d%d",&r,&c);
- a[r][c] = 1;
- b[r][c] = 1;
- }
-
- scanf("%d",&k);
- while(k) {
- for(int i = 1; i<m+1; i++) {
- for(int j = 0; j<n+1; j++) {
- if(a[i][j] == 1) {
- b[i-1][j] = 1;
- b[i+1][j] = 1;
- b[i][j-1] = 1;
- b[i][j+1] = 1;
- }
- }
- }
- memcpy(a,b,sizeof(b));
- k--;
- }
- int count = 0;
- // for(int i = 1; i<m+1; i++) {
- // for(int j = 1; j<n+1; j++) {
- // printf("%d",a[i][j]);
- // }
- // printf("\n");
- // }
- for(int i = 1; i<m+1; i++) {
- for(int j = 1; j<n+1; j++) {
- if(a[i][j] == 1)
- count++;
- }
- }
- printf("%d",count);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。