3634 积水(POI1999)
时间限制: 1 s
空间限制: 1000 KB
题目等级 : 大师 Master
题解
查看运行结果
题目描述 Description
有这样一块土地,它可以被划分N*M个正方形小块,每块面积是一平方英寸,第i行第j列的小块可以表示成P(i,j)。这块土地高低不平,每一小块地P(i,j)都有自己的高度H(i,j)(单位是英寸)。

一场倾盆大雨后,由于这块地地势高低不同,许多低洼地方都积存了不少降水。假如你已经知道这块土地的详细信息,你能求出它最多能积存多少立方英寸的降水么?

输入描述 Input Description
输入文件的第一行是两个正整数n和m,1<=n<=100,1<=m<=100,表示土地的尺寸。下面n行,每行m个整数(1..10000);第j行第i个数表示第j行第i列立方体的高。

输出描述 Output Description
输出文件只有一个数,表示在这个建筑上可以聚合的积水的最大值

样例输入 Sample Input

3 6
3 3 4 4 4 2
3 1 3 2 1 4
7 3 1 6 4 1

样例输出 Sample Output
5

数据范围及提示 Data Size & Hint
见输入描述
写在前面:继CA爷出完题虐过我们以后,sunshine爷也来跟风,结果我很没有意外的被虐杀了(CA爷的题目好歹还能用暴力得分啊啊啊啊)
——————————————————————————————————————————————
解题思路:刚开始我的想法是广搜(事实证明我的这一步思路没有问题),然后就是找出所有高于的点blabla,但是我跟傻~逼一样不加尾指针,并且我的想法就是错误的。后来我看了一下XYX大爷的程序,又问了一下ShallWe大爷解题原理,然后终于写出来了╮(╯▽╰)╭
基本的想法就是从1开始到最高高度,一层层灌水,看看能积攒多少水,把不能积水的点去掉,就是这一高度水下能积累的点,类似于细胞的做法
代码:

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,a[301][301],flag[301][301],fl[4],num;
//稍稍开大一点,可以防止越界(其实并没有什么用,102足以
struct os
{int x,y;
}team[20001];//这里也可以用两个数组来分别表示横纵坐标
main()
{int maxn=0;int ans=0;scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&a[i][j]);maxn=max(maxn,a[i][j]);}for (int i=1;i<=maxn;i++){int head=1,tail=1;num=1;for (int j=0;j<=n+1;j++)for (int k=0;k<=m+1;k++)if (a[j][k]<i) flag[j][k]=0;//能存水else {flag[j][k]=1;num++;}//不能存水team[1].x=0;team[1].y=0;//从(0,0)开始搜索,找出所有不能存水的点(其实我刚开始也是找不能存水的点,但是是直接找并不是逐层找,所以就不知道怎么判断内部的点(只是找出边界及边界所扩展的不能存水的点)while (head<=tail){flag[team[head].x][team[head].y]=1;if (team[head].y-1>=0)if (flag[team[head].x][team[head].y-1]==0){flag[team[head].x][team[head].y-1]=1;tail++;team[tail].x=team[head].x;team[tail].y=team[head].y-1;num++;}if (team[head].y+1<=m+1)if (flag[team[head].x][team[head].y+1]==0){flag[team[head].x][team[head].y+1]=1;tail++;team[tail].x=team[head].x;team[tail].y=team[head].y+1;num++;}if (team[head].x-1>=0)if (flag[team[head].x-1][team[head].y]==0){flag[team[head].x-1][team[head].y]=1;tail++;team[tail].x=team[head].x-1;team[tail].y=team[head].y;num++;}if (team[head].x+1<=n+1)if (flag[team[head].x+1][team[head].y]==0){flag[team[head].x+1][team[head].y]=1;tail++;team[tail].x=team[head].x+1;team[tail].y=team[head].y;num++;}head++;}ans=ans+(n+2)*(m+2)-num;//num这里是不能存水的点,因为算上了边界,n,m所以要加2}   printf("%d",ans);
}

【POI1999codevs3634】积水,关于sunshine爷的NOIP(suan)水(ge)题(pi)赛相关推荐

  1. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

  2. [NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)

    达哥送分给我我都不要,感觉自己挺牛批. $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=\sum C_n^i \times C_i^{\frac{i}{2}} \t ...

  3. 2021牛客NOIP提高组OI赛前模拟赛第一场T2——牛牛和数组操作(区间dp)

    牛牛和数组操作 description solution code description [题目描述] 有n + 2个整数a0, a1, . . . , an, an+1, a0 = an+1 = ...

  4. 【jzoj】2018/2/2 NOIP普及组——D组模拟赛

    前言 今天五道题,难度做起来感觉很难,其实就是纸老虎233. 正题 题目1:公牛数学(jzoj1896) 就是高精乘 输入 第1..2行:每行包含一个十进制数 输出 第1行:输出两个数乘积 样例输入 ...

  5. 【jzoj】2018.2.1 NOIP普及组——D组模拟赛

    前言 懒- 正题 题1:牛车(jzoj1390) 有m条公路,有n头牛各开一辆车,如果有x辆车开在它前门,它速度就会降低d*x,路上速度至少为l.求有多少头牛可以上路. 输入 第1行: 4个空格隔开的 ...

  6. 【jzoj】2018.1.31 NOIP普及组——D组模拟赛

    前言 今天题目比较水and我进了C组,不过太太太太太太太太太太太太太太太太绝望了QAQ.所以我也没有做C组的题.写完博客我就做O(∩_∩)O. 正题 题1:奇数统计(jzoj1547) 就是输入n个数 ...

  7. 洛谷P2347 砝码称重 某一年noip提高组原题

    可以转化为01背包求方案数的问题,dp数组f[][]表示第几个砝码能称出的重量,可压缩至一维 转移方程为f(i,j)+=f(i-1,j-w[i]) 当前我们可以称出的重量必定是由之前的砝码重量转移过来 ...

  8. [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告

    [NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...

  9. $NOIP 2018 PJ游记[ZJ]$

    众所周知 NOIP = NOI plus. NOIP ZJ-PJ 2018 以下仅为游记 . 题解预留.- >T3 T4 (T1T2太水了不放了) 定位 杭州学军中学紫荆港校区(浙江赛区) da ...

最新文章

  1. 独家 | 每个数据科学家应该知道的五种检测异常值的方法(附Python代码)
  2. 江翰服务器保护系统(JH-Data Backup server)
  3. 【BZOJ4237】稻草人
  4. Midway Serverless 发布 2.0,一体化让前端研发再次提效
  5. html的opacity标签,css中opacity是什么意思
  6. JavaScript中的arguments对象
  7. rabbitmq 手动提交_第四章----SpringBoot+RabbitMQ发送确认和消费手动确认机制
  8. 超实用PHP函数总结整理
  9. Spark Streaming处理File Streams
  10. 研究表明:学生经常登录Facebook 课程不及格的概率上升(意译)
  11. linux+livecd维修工具,使用LiveCd修复Ubuntu
  12. 淘宝/天猫获得淘口令真实url API
  13. VS2008SP1的MFC测试-Ribbon风格(DJ尐舞图形画板2008)
  14. 【故障分析】基于matlab GUI蚁群算法故障诊断【含Matlab源码 931期】
  15. 揭开 Java 注解的神秘面纱
  16. Elasticsearch设置ip访问
  17. 【elementUI】el-table树形结构样式修改-gif展示说明 按要求自取即可
  18. 【倾心整理】高级工程师手写总结,入门到顶级程序员的学习方法
  19. AUTOSAR Port原理概念详解
  20. skp与卫星地图和倾斜摄影模型相结合,让SKP模型在地图上活起来 !

热门文章

  1. mysql dba命令_mysql DBA:mysqladmin常用命令总结
  2. Android笔记 fragment的生命周期
  3. 基于序贯重要性重采样的粒子滤波and(RBPF)
  4. keras报错ValueError: No data provided for XXX
  5. form表单 vue 拖拽_vue实现可视化可拖放的自定义表单(代码示例)
  6. python分解word文档为多个_用python批量处理word文档
  7. xmind 模板_XMind 教程 | 如何写出让人眼前一亮的年终总结?
  8. datareader对象转化为int_【Angew. Chem. Int. Ed.】光催化丙二烯的去消旋反应
  9. 虚拟服务器怎么进去,怎么进入虚拟主机
  10. feign直接走熔断_SpringCloud微服务(03):Hystrix组件,实现服务熔断