[刷题]算法竞赛入门经典(第2版) 4-10/UVa815 - Flooded!
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO
代码:(Accepted,0 ms)
//UVa815 - Flooded!
#include<iostream>
#include<algorithm>
int M, N, W, S[1000], T = 0;
int main()
{
//freopen("in.txt", "r", stdin);
while (scanf("%d%d", &M, &N) != -1 && M != 0 && N != 0) {
for (int i = 0, *p = S;i < M*N;++i)
scanf("%d", p++);
scanf("%d", &W);
std::sort(S, S + M*N);
int i, water = 0;
for (i = 1;i < M*N;++i) {
int t = water + i*(S[i] - S[i - 1]) * 100;
if (t >= W) break;
water = t;
}
float level = (float)(W - water) / (float)(i * 100) + S[i - 1];
printf("Region %d\nWater level is %.2f meters.\n", ++T, level);
printf("%.2f percent of the region is under water.\n\n", (float)(i * 100) / (float)(M*N));
}
return 0;
}
题意:简单的理解,就是给你一个铁桶,铁桶桶壁无限高,桶底是个长方形,一边长M · 10米,另一边长N · 10米。把这个桶底分为M · N个正方形区域,即每个正方形边长10米。现在每单个正方形区域高度处处都是一样的,每个不同的区域高度不一。现在一桶体积位W的水倒进去,问淹了多少区域,水高度多少。
分析:看懂这题后感觉很惊奇,原来在现实生活中都没想过的简单问题在编程里实现要考虑的东西还不少!紫书说:本题有多种解法,可以锻炼思维。那我先说说我想到的方法吧:
- 计算平均海拔后再看哪些地本应该是露在外面的,依此调整水高度。但是后来发现并不合算。
- 一桶水全浇第一块地上,往旁边扩散。但是怎么实现。。想想也不合算。
- 每10 · 10 · 1体积的水填进最低海拔的区域去,对于一样高的区域随便填哪个。直到最后可能发现水平面不平,把凸出来的水平均划分到整个没在水里的区域。但是按每一个单位的水来循环,循环量很大,最后凸出来的水也要分开计算。
现在使用的方法。(本来想到好几个方法,最后发现其实都很相近,把这些类似的方法整合、优化成了这一个)升序排序每一个区域的高度,一个区域一个区域地填水。具体如下:
[刷题]算法竞赛入门经典(第2版) 4-10/UVa815 - Flooded!的更多相关文章
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci
题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...
- [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A
题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
- [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...
- [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile
题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...
- [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536
这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...
- [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities
题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...
- [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary
题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...
随机推荐
- 腾讯云数据库团队:PostgreSQL TOAST技术理解
作者介绍:胡彬 腾讯云高级工程师 TOAST是"The Oversized-Attribute Storage Technique"的缩写,主要用于存储一个大字段的值.要理解TOA ...
- require include 一个隐藏的用法:作用域。
最近在研究php底层框架,奇怪的一点.控制器里为什么要把从model里获取的数据 需要$this->assign('items', $items); 这种形式模板文件里才可以调用到这个变量.控制 ...
- 机器学习:Python中如何使用支持向量机(SVM)算法
(简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...
- Javascript 闭包访问问题?
function pfajax(paradata){ $.ajax({ data : paradata.dat, type : paradata.method, async: false, url : ...
- 服务器中 配置phpstudy一键安装包
在线phpstudy一键安装包 安装版: (很简单) wget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin ...
- (iOS)关于zbar扫描条形码,所搭载的设备
四个月之前写的,现在发出来. 最近在开发一款程序的时候,功能要求扫描条形码. 现在最流行的扫描条形码的开源代码有zbar和zxing两种,可以支持多种一维和二维码. 之前了解过zbar,所以这次试用z ...
- PHP对象相关知识点的总结
对象传递:一种说法是"PHP对象是通过引用传递的",更准确的说法是别名(标识符)传递,即它们都保存着同一个标识符(ID)的拷贝,这个标识符指向同一个对象的真正内容. <?ph ...
- UTF-8 GBK UTF8 GB2312 之间的区别和关系
UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 ...
- JS学习中遇到的一些题目
1.找出所有的水仙花数: 水仙花数例如:153 的特点: 1^3+5^3+3^=153 而且水仙花数只会是三位数,所以可以利用循环的方式来解决问题,循环条件可以设为: var i = 1;i < ...
- node.js系列(实例):原生node.js实现静态资源管理
/** * node入门之综合案例(一):简易路由 * @Author : by Ghost * @Date : 2016/07/11 * @Description : * 1.引入以下模块 * ht ...