您的位置:首页 > 其它

POJ 1877

2011-06-12 13:51 211 查看
这一题其实可以写得很简单,只是对于差值的统计比较陌生,连续WA了5,6次才过了,我了个叉。。。

#include <cstdio>
using namespace std;
const int MAX = 10000;
int		A[MAX];
void	quicksort( int left , int right )
{
int i = left ;
int j = right;
int key = A[i];
while( i < j )
{
while( A[j] > key && i < j )
--j;
if( i < j )
A[i++] = A[j];
while( A[i] < key && i < j )
++i;
if( i < j )
A[j--] = A[i];
}
A[i] = key;
if( left < i - 1 )
quicksort( left , i - 1 );
if( i + 1 < right )
quicksort( i + 1 , right );
}
int main()
{
int row,col,n2;
int maxnumber;
double sum,mid,high;
int		k = 1;
while( scanf("%d%d",&row,&col) , row != 0 || col != 0 )
{
n2 = row*col;
for( int i = 0 ; i != n2 ; ++i )
scanf("%d",&A[i]);
scanf("%d",&maxnumber);
quicksort( 0 , n2 - 1 );
if( k != 1 )
printf("/nRegion %d/n",k++);
else
printf("Region %d/n",k++);
if( maxnumber == 0 )
{
printf("Water level is 0.00 meters./n");
printf("0.00 percent of the region is under water./n");
}
else
{
sum = 0 ;high = 0 ;
int	i;
for( i = 1 ; i < n2 ; ++i )
{
mid = ( A[i] - A[i-1] ) * i * 100;
if( sum + mid >= maxnumber )
break;
sum += mid;
high += A[i] - A[i-1];
}
high += ( maxnumber - sum )/100.0/i;
printf("Water level is %.2lf meters./n",high + A[0]);
printf("%.2lf percent of the region is under water./n",i*100.0/n2);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: