1 条题解

  • 0
    @ 2025-5-30 15:49:18

    题意分析

    给定由 10 米 ×10 米方格组成的矩形区域,每个方格有海拔高度。水会优先聚集在低海拔区域,需根据总水量计算最终水位及被淹没区域百分比(海拔严格低于水位的方格占比)。

    解题思路

    排序海拔高度:将所有方格的海拔按升序排列,确保低海拔在前。 计算前缀和:通过前缀和数组快速计算前k个方格的海拔总和。 二分查找水位:遍历排序后的海拔,找到首个使所需水量超过实际水量的位置,确定水位区间。 精确计算水位:根据剩余水量和已填充方格数,计算水位的精确值。 计算淹没百分比:统计已填充的方格数占总方格数的比例。

    
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 900;
    
    int main() {
    	int n, m;
    	int v;
    	int d[maxn], sum[maxn];
    	int counter = 1;
    
    	while (scanf("%d%d", &n, &m) != EOF, n || m) {
    		int i, j;
    		for (i = 0; i < m * n; ++i) {
    			scanf("%d", &d[i]);
    		}
    
    		scanf("%d", &v);
    
    		sort(d, d + n * m);
    
    		sum[0] = d[0];
    		for (i = 1; i < n * m; ++i) {
    			sum[i] = d[i] + sum[i - 1];
    		}
    
    		for (i = 1; i < n * m; ++i) {
    			if ((d[i] * i - sum[i - 1]) * 100 >= v) {
    				break;
    			}
    		}
    
    		printf("Region %d\n", counter++);
    		printf("Water level is %.2lf meters.\n", (v / 100.0 + sum[i - 1]) / i);
    		printf("%.2lf percent of the region is under water.\n\n", 100.0 * i / (n * m));
    	}
    
    	return 0;
    }
    
    • 1

    信息

    ID
    878
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者