算法竞赛入门经典 第二版 习题4-10 洪水 Flooded uva815

本文针对一个洪水模拟问题,介绍了一种通过排序海拔高度并逐步计算淹没区域的方法来确定洪水达到的最大高度及其覆盖百分比。文章提供了详细的算法思路及C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:https://vjudge.net/problem/UVA-815

读题时间贼长,紫书点名能锻炼思维,然而我迟迟想不出算法TvT

思路:将海拔递增排序,然后开始从海拔最低的区域计算若洪水淹没到这个区域最多需要多少水(即水平面等于海拔更高的区域的海拔),是否大于等于洪水体积。若是,则被淹没的区域就是循环变量+1。然后算出来水平面和比例就好。

注:(1)将水的体积除以100就可以忽略单位影响。
(2)被水全部淹没时需要处理。
(3)注意格式Follow the output for each region with a blank line.
最后一行后面也有空行。

代码:c++

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int elevation[1000],m,n,cases=0,sum,cot;
    double proportion,h,v_water,v_temp;
    int i;
    while(cin>>m>>n)
    {
        if(m==0&&n==0)
        {
            break;
        }
        cases++;
        for(i=0; i<m*n; i++)
        {
            cin >> elevation[i];
        }
        cin >> v_water;
        v_water /= 100;
        sort(elevation,elevation+m*n);
        sum = 0;
        for(i=0; i<m*n; i++)
        {
            sum += elevation[i];
            if(i+1!=n*m)
            {
                v_temp = elevation[i+1]*(i+1) - sum;
                if(v_temp>=v_water)
                {
                    break;
                }
            }
        }
        cot = i==m*n?i:i+1;
        h = (v_water+sum)/cot;
        proportion = 100*(double)cot/m/n;
        cout << "Region " << cases << endl;
        printf("Water level is %.2lf meters.\n", h);
        printf("%.2lf percent of the region is under water.\n\n", proportion);
    }
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值