1 条题解
-
0
题意分析
给定由 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
- 上传者