uva 815 Flooded!

来源:互联网 发布:淘宝客服规则 编辑:程序博客网 时间:2024/06/06 18:14

题目: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;}