当前位置:   article > 正文

第十二题:灌溉

第十二题:灌溉

题目描述

小蓝负责花园的灌溉工作。

花园可以看成一个 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

输入

  1. 3 6
  2. 2
  3. 2 2
  4. 3 4
  5. 1

输出

9

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

分析:

读懂题意了这道题不难。注意的是每过一分钟,出水口上下左右四个方格就会住满水。

代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(int argc, char *argv[]) {
  5. int m,n;
  6. int a[101][101] = {0};
  7. int b[101][101] = {0};
  8. scanf("%d%d",&m,&n);
  9. int t;
  10. int k;
  11. scanf("%d",&t);
  12. int r,c;
  13. for(int i = 0; i<t; i++) {
  14. scanf("%d%d",&r,&c);
  15. a[r][c] = 1;
  16. b[r][c] = 1;
  17. }
  18. scanf("%d",&k);
  19. while(k) {
  20. for(int i = 1; i<m+1; i++) {
  21. for(int j = 0; j<n+1; j++) {
  22. if(a[i][j] == 1) {
  23. b[i-1][j] = 1;
  24. b[i+1][j] = 1;
  25. b[i][j-1] = 1;
  26. b[i][j+1] = 1;
  27. }
  28. }
  29. }
  30. memcpy(a,b,sizeof(b));
  31. k--;
  32. }
  33. int count = 0;
  34. // for(int i = 1; i<m+1; i++) {
  35. // for(int j = 1; j<n+1; j++) {
  36. // printf("%d",a[i][j]);
  37. // }
  38. // printf("\n");
  39. // }
  40. for(int i = 1; i<m+1; i++) {
  41. for(int j = 1; j<n+1; j++) {
  42. if(a[i][j] == 1)
  43. count++;
  44. }
  45. }
  46. printf("%d",count);
  47. return 0;
  48. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/399174
推荐阅读
相关标签
  

闽ICP备14008679号