Cpp环境【Uva815】【Vijos2776】洪水 Flood

UVA815 洪水! Flooded! 19分钟过了,这个题比较像PAT上面的排序模拟题,就是排个序,然后模拟就完事了,首先题目的意思是除了给定的区域,外面是无限高的,就是哪怕你覆盖了所有的区域,那么水面的高度还要上升,然后就是我的思路,我们可以想象,把所有的区域都排成一列,然后按照顺序,一层一层的模拟,这个和矩形区域是等价的,接下来就是处理模拟过程的细节,其中一个很重要的是,我们模拟到了某一层,要算水的高度,是要把之前的层的面积都算进去的,因为我们是从低向高模拟的,每一层都会覆盖前面的层, 阅读详情
【问题描述】  

  有一个n行m列的网格,每个格子是边长为10米的正方形,网格四周是无限高的墙壁,第i行第j列每个格子的海拔高度为h[i][j]。现在网格中有T立方米的水,请你计算网格中的水平面的海拔高度,以及有水格子数目。注意,在网格中,所有有水格子的水平面的海拔高度相同,所以有水格子的数量为海拔高度严格小于水平面高度的格子数目。

【输入格式】  

  第一行整数n和m,表示网格有n行m列。
  接下来是n行m列的矩阵,第i行第j列的数字为对应格子的海拔高度h[i][j]。
  最后一行为整数T,表示网格中水的体积。

【输出格式】  

  第一行为一个实数,表示水平面的海拔高度,保留2位小数。
  第二行为一个整数,表示有水格子的数目。

【输入样例】  

3 3
25 37 45
51 12 34
94 83 27
10000

【输出样例】  

46.67
6

【数据范围】  

1<=n,m<=30
0<=h[i][j]<=1 000 000
1<=T<=1 000 000 000

【思路梳理】

  题不难,但是实际上需要考虑的细节有点多。我们的一道考试题,首先想到的是考虑二分猜测答案猜测洪水的高度,每一次统计淹没的区域和此时的体积,再与输入的总体积比较。可以运用剪枝技巧,如果某一时刻所有区域还未统计完此时的体积就已经大于了答案,那么直接进行下一次猜测即可。
  但实际上考试的时候因为某种不可知的原因,猜出来总是有误差(比如我的样例的答案就是47.01)。二分猜答案不难,有兴趣的读者可以试试,完成笔者未遂的心愿。
  笔者采用的做法是排序查找,用优先队列将高度从小到大排序,每一次取出两个元素(队顶元素调用出队,另一个只是调用),计算是否能够淹没到下一个高度,如果不行就直接清算当前结果给出答案输出。这个时候就涉及到一个问题:万一所有的格子都被淹没了,队列中就将无元素可取。根据题意,可以手动加入一个高度无限高的元素height[0][0],防止这种极端情况出现。

【CPP代码】
#include<cstdio>
#include<queue>
#include<iostream>
#define maxn 35
#define inf 20000005
using namespace std;
int n,m,ans=0;
double T;
struct cmp
{
    bool operator()(int a,int b)
    {
        return a>b;
    }
};
priority_queue<int,vector<int>,cmp>q;

void solve()
{
    int num=0;
    double ans=0;
    while(!q.empty())
    {
        int x=q.top();q.pop();
        int xx=q.top();
        num++;
        double t=(xx-x); //从当前位置开始淹没下一高度所需要的水量
        //注意本应该是t=(xx-x)*num*10*10,为了防止溢出,将后半段移到了下面 
        if(T*1.0/(num*10*10)<=t)//不够淹没下一高度
        {
            ans=x+T*1.0/(num*10*10);//清算当前高度 
            T=0;
            break;
        }   
        T=(T*1.0/(num*10*10)-t)*num*10*10;//防溢出 
    }
    printf("%.2lf\n%d",ans,num);
}

int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("flood.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)   
    {
        int x;
        scanf("%d",&x);
        q.push(x);
    }
    q.push(inf);
    cin>>T;
    solve();
    return 0;
}
UVA815 洪水题解 有一个*n* ×*m* (1≤*m* ,n* <30)的网格,每个格子是边长10米的正方形,网格四周是无限大的墙壁。输入每个格子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度以及有多少百分比的区域有水(即高度严格小于水平面)。 阅读详情

相关推荐

在VS2019里把JSBSim飞行模型集成到你的C++项目里(附完整配置流程和常见错误解决)

本文详细介绍了如何在Visual Studio 2019中将JSBSim飞行模型集成到C++项目中,包括环境准备、源码编译、项目配置和常见错误解决方案。通过实战技巧和优化建议,帮助开发者高效实现高精度飞行仿真功能,提升开发效率。

weixin_42620202的博客 413

UVA815 洪水Flooded

模拟题,排序模拟即可,中间有一个地方写错了结果耽误了一下会儿, #include <bits/stdc++.h> #define fi first #define se second #define pb push_back #define mk make_pair #define sz(x) ((int) (x).size()) #define all(x) (x).begin(), (x).end() using namespace std; typedef long long ll;

qq_33942309的博客 419

在Wincc8.0的Wincc 3D Control控件中使用3D模型

如果之前没有在Blender中自定义光照,EnableBackground属性选择“是”,Wincc 3D Control会按一个均匀的光照强度渲染。Wincc8.0更新后提供了一个Wincc 3D Control控件来显示3D图像,但是该控件实际体验下来现阶段还存在功能不足、运行不稳定的问题。再把导出的dae文件复制进Wincc项目的GraCS文件夹中,文件名称复制进控件的SceneFile属性里。选择编辑模式,全选模型,点击网格→分离→按材质,分离出不同的部件(不同的部件最好使用不同的材质)。

ghoring的博客 7129

UVA815(洪水)。

关键就是给海拔排个序,找出有多少快地低于水平面。 要注意n=m=1的情况,和100%的情况。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <string> 5 #include <vector> ...

266

Qt·DBus快速入门

DBus快速入门

m0_64560763的博客 2272

告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程

本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。

weixin_29015483的博客 580

[C] uva815

UVa815 解题思路 一看到题我的第一个想法就是:使用二维数组。找出最矮的格子,然后填满至周围最矮的格子,重复直到达到水量。 但是这样最大的问题是每次都要找出最小,复杂度太高。 再深入思考下,会发现既然要找最小不如先排序下。 既然要排序,那么二维数组这个结构就不太合适了,于是想到化二维为一维。 注意,这里最最重要的思想是:把底化为1 x n*m的长方形,水平面高度不变(见下图)。这就为二维数组化...

TuYoKuNaRu的博客 389

手把手教你用Gazebo插件实现阿克曼底盘仿真(附Navigation2适配指南)

本文提供了一份完整的ROS2 Navigation2与Gazebo阿克曼底盘仿真全栈指南。从阿克曼运动学原理出发,详细讲解了如何构建URDF/SDF模型、集成gazebo_ros_ackermann_drive插件并进行PID调优,并重点阐述了如何深度适配Navigation2,包括配置Ackermann运动模型、调整规划器与恢复行为,最终实现从建图到自主导航的全流程仿真。

weixin_29310631的博客 398

UVA - 815 Flooded!

传送门:UVA-815 二分法,水位最低在最低的格子,最高不超过maxn+v/(n*m)/100+1,其中maxn表示最高的格子的高度,v代表水体积。最后保留两位小数,精度eps设为1e-4足够了 AC代码: #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; const double eps=1e-4; ...

weixin_42547447的博客 324

初探Proxmox Datacenter Manager:统一管理多集群与单节点的利器

本文介绍了Proxmox Datacenter Manager (PDM) 这一统一管理工具,它能有效解决多套Proxmox VE环境(包括集群和单节点)管理碎片化的痛点。文章详细阐述了PDM的核心功能、安装部署步骤,并通过实战演示了如何添加单节点与整个集群,实现资源的集中监控与基础运维,为运维人员提供了高效的集中管理解决方案。

weixin_29217235的博客 159

基于PointNet++网络的点云数据分类仿真分析

局部特征学习模块用于学习点云中每个点的局部特征表示,而全局特征学习模块用于学习整个点云的全局特征表示。点云数据分类是指将点云数据分为不同的类别或标签。PointNet++是一种用于点云数据处理的深度学习网络,它能够有效地学习点云数据的特征表示并实现高精度的分类。在本文中,我们将使用MATLAB实现基于PointNet++网络的点云数据分类仿真分析,并提供相应的源代码。然后,我们使用splitEachLabel函数将数据划分为训练集和测试集,其中80%的数据用于训练,20%的数据用于测试。

HackDashX的博客 210

UVa815--Flooded--洪水

题目链接https://vjudge.net/problem/UVA-815 有一个n*m(1≤m,n 注意:Follow the output for each region with a blank line.说的是每个测试用例输出结束之后输出一个空行!!!蛋疼,之前理解成两次输出中间有一个空行,我就处理成第二次或者之后每次输出的时候先输出一个空行。这是不对的,两者之间有差别的!改

话歪之地的博客 1848

华为OD机试真题2026双机位C卷 C语言 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 182

【刷题记录】 UVA 815 洪水

题意:一个n*m的方格区域,共有n*m个方格,每个方格是边长为10米的正方形,整个区域的外围是无限高的高墙,给出这n*m个方格的初始高度,和洪水的总体积,计算灌入洪水后这个方格区域的水面高度,以及洪水淹没比例。

这里是阿安的博客 560

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Flooded! - UVa 815 二分

Flooded! To enable homebuyers to estimate the cost of flood insurance, a real-estate firm provides clients with the elevation of each 10-meter by 10-meter square of land in regions where homes ma

提比的强行AC 1163

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

4-10 UVA 815 Flooded!洪水

一般能自己手算出样例输入来,那题意就基本明确了,这个题大体题意是,有一个网格,网格里均匀分布正方形土地,洪水总是在最低处忘上淹,问一定量的水的体积淹没过后,最终洪水的水平面和淹没土地的百分比例。     大体思路:因为洪水总是在最低处往上淹,所以可以先把土地的高度数组先用快排排序(就是把面积的问题转换成线的问题),先淹没小的,淹没一个减少一定量的水的体积直到小于等于0为止。     教训:虽然

aozil_yang的博客 664

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

UVa815

每次都是看不懂题,上网搜题干的详解,然后着手开始做。。 这道题感觉不是很难,思路就是先把数组由小到大排序,求出海拔高度,如果海拔高度比下一块低的话,就break。 #include #include #include using namespace std; int main() { int x,y,i,j,v; double h; int region=1;

hi25779的博客 372

UVA815

这道题主要学到的就是数据结构的组织,一些需要从小到大排列的东西,这些东西还有对应的东西。这个时候使用map可以解决 下面贴出代码。其中所使用的思想,估计这个东西是没法学的,这就只能是灵感 //这是什么吉尔题,题意都没有说清楚,排水系统保证从最低的开始,而且四面都是高地 //我想要的数据结构是,从小到大把海拔排序,每个海拔对应=这个海拔的块数,以及比这个海拔低的块数 //最后计...

271

UVa815 - Flooded!

//UVa815 - Flooded! //直接模拟,注意考虑临界情况 #include #include using namespace std; int main(){ //freopen("UVa815.in","r",stdin); int n, m, kase = 1; while(scanf("%d%d",&n,&m)==2 &&n &&m){ int ans[30*30]

小哈里的博客 1026

UVA 815 Flooded!

题意:有一个n*m的网格,每个格子是边长10米的正方形,整个网格的四周是无限高的墙壁。现在输入每个格子内的长方体的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度以及有多少百分比的区域有水(即高度严格小于水平面) 本题方法有很多种,我是先将每个格子的高度排序,而水平面一定位于2个高度直接,所以假设水平面以及与当前格子同高,如果已经淹没的区域小于总体积就继续枚举,否则就可以直接算出剩下的高度

weilehuozhe的专栏 626

bzoj 3358: [Usaco2004 Jan]洪水

→题目链接← 保存每个高度有多少个 如果目前剩的水的体积大于目前最矮的高度的数量,那么会使水面高度整体上升1,然后把目前的高度+1 然后再判断下以前是否已经有了+1后的高度,如果有把这两堆合并,再推进优先队列 直到最终高度后,只要初始高度小于等于最终高度,都加进ans 最后输出 最终高度 和 ans 代码: #include #include #include #in

everlasting的博客 434

[BZOJ3358][Usaco2004 Jan]洪水

题意给定一张N∗MN*M的地图,每个格子有一个海拔高度。有一个降雨量VV,求降水后水面的高度和被水覆盖的陆地的体积。二分降水后的水面高度。顺便处理被水覆盖的体积。O(NMlog V)O(NM\log~V)#include <cstdio> #define N 410int A[N][N],n,m,v; long long Ans;inline bool check(int x){ long

CE玩家 808

CQBZOJ - 2935 病毒分裂 分治算法+快速幂 重庆一中高2018级竞赛班第六次测试 2016.7.31 Problem 1

【问题描述】 A学校的实验室新研制出了一种十分厉害的病毒。由于这种病毒太难以人工制造了,所以专家们在一开始只做出了一个这样的病毒。这个病毒被植入了特殊的微型芯片,使其可以具有一些可编程的特殊性能。最重要的一个性能就是,专家们可以自行设定病毒的分裂能力 K,假如现在有x 个病毒,下一个分裂周期将会有 Kx个一模一样的病毒。你作为该实验室的数据分析员,需要统计出在分裂到第N个周期前,一共有多少个病毒单

灬豪侠彡 848

算法竞赛入门经典(第2版)习题4-10 洪水!UVa815

放假的时候特别容易懒惰,最近考c1车牌过了科目一;开学第一周还要进行一轮校内选拔,加油吧!

Hozy 1180

UVA-815 flooded!(白书说能锻炼思维的题)

题意挺长的,而且是英文的,我这里就简述一下吧,就是有m*n个格子,每个格子都是10*10的规格(高度是无限的),给出每个格子的海拔,然后给出一个洪水的量,输出最后水深度和完全被水覆盖的面积百分比。这个主要理解问题在于,不存在什么盆地之类的问题,这些格子就像连通器一样,涨水都是一块涨的,嗯,大概就是这个意思了。 至于思路嘛,我的思路就是一维数组排序之后,从最低的开始挨个判断覆盖这个格子之后是否还有

每天get√新知识 2641

【贪心】【模拟】[POJ1877]Flooded!

Description To enable homebuyers to estimate the cost of flood insurance, a real-estate firm provides clients with the elevation of each 10-meter by 10-meter square of land in regions where homes may

XiaoZheng的博客 787
上一篇: Cpp环境 【poj 2940 】【Uva11054】【Vijos2909】Wine Trading in Gergovia 格尔高维亚的肮脏红酒交易
下一篇: Cpp环境【POJ3069】【Vijos2995】 萨鲁曼的大军 Saruman's Army
cqyz_Lebmond
博客等级 码龄10年 18粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值