此题作者建议使用多种方法解题锻炼一下
我想到了若干解法,基本大同小异,真正核心的计算海拔的算法只想出两种:
第一个解法:把所有格子按海拔顺序排序,把每一档海拔与下一档之间能够容纳的水依次累加直到大于水的总体积。
第二个解法:把所有格子按海拔顺序排序,逐个计算含水海拔,第n个格子的含水海拔=(总水量+n个格子相对于0海拔的体积)/n个格子的面积和,顺序读入后面格子海拔,如果此格高于已算出的含水海拔则终止。
解法一:
//#define LOCAL
//#define TESTING
#include<stdio.h>
#include<string.h>
void swap(int* a, int* b)//变量值交换函数
{
int t = *a; *a = *b; *b = t;
}
int main()
{
#ifdef LOCAL
freopen("xt4-10.in","r",stdin);
#endif
int m,n,kase=0;
while(scanf("%d%d",&m,&n)==2&&m&&n)
{
kase++;
#ifdef TESTING
printf("%d %d\n", m, n);
#endif
int tot = m*n;//tot格子总数
int grid[tot+2],water;//grid[]格子海拔 water水量
for(int i = 1; i <= tot; i