uva 815 Flooded!

本文介绍了一种用于模拟洪水覆盖情况的算法。通过划分区域并计算每个小方块所能承受的水量来确定水位高度及被淹没区域的比例。文章详细解释了实现思路与步骤,并提供了完整的C++代码。

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

题目:Flooded!


题意:给定一个大小为n*m的地域,每一个方块的边长都为10。已知每一个方块区域的高度和水的总体积,求水平面的高度和被水浸没的面积占种面积的百分之几。


思路:

1、将整个空间想象成被划分为体积为10*10*1的小方块,求出到哪一层小方块就不能被水完全浸没。

2、将不能被水浸没的那层小方块能容纳水的面积求出,再用剩余水的体积除以面积得这一层被水浸没的高度。

3、计算,输出。


注意:

地域的高度可为负,此时,我把所有的高度都加了一个最深的深度(此值为正,也就是最低的高度的相反数),也就是说让所有的地域高度都为非负数。


代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

int n,m;
int h[35][35]= {0};
int Fill;
int k=0,sum=0;
int T=0;
int lowest=0;

void init() {
	k=0,sum=0;
	lowest=0;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			scanf("%d",&h[i][j]);
			if(h[i][j]<lowest) lowest=h[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			h[i][j]-=lowest;
		}
	}
	scanf("%d",&Fill);
}

void Count() {
	while(true) {
		int s=0;
		k++;
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=m; j++) {
				if(h[i][j]<k) s+=100;
			}
		}
		if(sum+s>=Fill) return;
		sum+=s;
	}
	return;
}

void print(float H,float V){
	printf("Region %d\nWater level is %.2f meters.\n%.2f percent of the region is under water.\n\n",++T,H+lowest,V);
}

void Remain(){
	int s=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(h[i][j]<k) s+=100;
		}
	}
	float H=((float)Fill-sum)/s+k-1;
	float V=(float)s/(n*m*100)*100;
	print(H,V);
}

int main() {
	while(scanf("%d%d",&n,&m)==2&&n!=0&&m!=0) {
		init();
		Count();
		Remain();
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值