ICPC 2023
ICPC 2023

I. Waterworld

47th Annual hosted by ICPC World Championship AASTMT Problem I Waterworld Time limit: 3 seconds...

Updated May 21, 2026
Track ICPC
Year 2023
Statement Text + PDF
TeXC++Statement textStatement PDF

Problem Statement

Formatted from the contest statement text, with sample tests broken out into copyable blocks.

  47th Annual                                                                                 hosted by
  ICPC World
Championship                                                                                  AASTMT
                                             Problem I
                                             Waterworld
                                      Time limit: 3 seconds
Thousands of planets outside the Solar System have been discovered in recent years. An important factor
for potential life support is the availability of liquid water. Detecting water on faraway planets is not easy.
For rotating planets, a brand-new technology using relativistic quantum-polarized spectroscopy can help.
It works as follows (this is a simplified description as only three people on this planet understand how it
really works).
Assume the telescope shows the planet such that its rotating
axis is vertical and its equator is horizontal. Only the vertical
line at the center of the image (the line that covers the rotating
axis) is analyzed, because it provides the highest resolution of
the planet’s surface.
The analysis proceeds in steps of d degrees. In one step, data is
aggregated while the planet rotates by d degrees, so each step
gives information about a slice of d degrees of the planet’s
surface. The image is split into n segments of equal height,
which are analyzed separately. So the slice of d degrees is
partitioned into n areas A1 , . . . , An . For each area Ai , image
analysis produces a number that gives the percentage of Ai
covered by water. The areas Ai for one step are highlighted in
the diagram on the right.
You may assume the planet’s surface is a sphere. This means each area A2 , . . . , An−1 is a spherical
quadrilateral: it has four vertices, two sides parallel to the equator (that is, in planes parallel to the
equator’s plane) and two sides on great circles through the planet’s poles, where the great circles are d
degrees apart. At either pole, two of the four vertices collapse into the pole, so A1 and An are spherical
triangles with only one side parallel to the equator. Due to the curvature of the surface, sides that are
parallel to the equator are longer if they are closer to the equator, while sides on great circles are longer
if they are closer to the poles.
The above process is repeated for the next d degrees of rotation, and so on, a total number of m times,
until the whole surface of the planet has been covered (that is, md = 360 degrees). Your task is to
compute the percentage of the planet’s surface covered by water from the given data.

Input

The first line of input contains the two integers n and m (2 ≤ n, m ≤ 1000). Each of the following n lines contains m integers ai,j (0 ≤ ai,j ≤ 100 for 1 ≤ i ≤ n and 1 ≤ j ≤ m). Each column of this matrix describes the measurements for a single step, that is, a rotation by d degrees. The number ai,j is the percentage of area Ai that is covered by water in the j th step.

Output

Output the percentage of the planet’s surface covered by water. Your answer should have an absolute error of at most 10−6 .

                               World Finals | ICPC 2023 Luxor
 47th Annual                                                         hosted by
  ICPC World
Championship                                                         AASTMT

Sample Tests

Sample 1
Sample Input
3 7
63 61 55 54 77 87 89
73 60 38 5 16 56 91
75 43 11 3 16 20 95
Sample Output
51.809523810
Sample 2
Sample Input
4 3
10 10   10
10 10   10
10 10   10
10 10   10
Sample Output
10.000000000

Editorial

The solution write-up is rendered from the LaTeX source, with equations kept live through MathJax.

Key Observations

  • On a sphere of radius $R$, the surface area of a horizontal band of height $h$ is $2\pi Rh$.

  • Therefore, in the cylindrical equal-area projection, equal vertical heights correspond to equal surface areas.

  • Each input row describes one horizontal band of equal height, and each input column describes one rotation slice of equal angle. So every matrix entry corresponds to exactly the same surface area.

Algorithm

  1. Read all $nm$ percentages.

  2. Compute their arithmetic mean.

  3. Output that mean.

Correctness Proof

We prove that the algorithm returns the correct answer.

Lemma 1.

All $nm$ cells represented by the input have equal surface area on the sphere.

Proof.

Each row has the same height, so by the equal-area formula for spherical bands each row occupies the same total surface area as every other row. Each column splits a row into equal angles, so it also splits that row into equal areas. Hence every row-column cell has the same surface area. □

Theorem.

The algorithm outputs the true percentage of the planet covered by water.

Proof.

By Lemma 1, the whole planet is partitioned into $nm$ equal-area cells, and the input value of each cell is its water percentage. The global water percentage is therefore the average of those $nm$ percentages, which is exactly what the algorithm computes. □

Complexity Analysis

The algorithm reads the matrix once, so the running time is $O(nm)$ and the memory usage is $O(1)$ besides the input values being streamed.

Implementation Notes

  • Using floating point only for the final average is enough; the input values themselves are integers.

Code

C++ solution used for this page.

C++

Clean code view with a raw-file link when you want the original source.

Raw file
#include <bits/stdc++.h>
using namespace std;

namespace {

void solve() {
    int n, m;
    cin >> n >> m;

    long double sum = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            int x;
            cin >> x;
            sum += x;
        }
    }

    cout << fixed << setprecision(9) << sum / (n * m) << '\n';
}

}  // namespace

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    solve();
    return 0;
}

Source Files and Assets

Raw files are still available here when you want the original TeX, C++, or statement assets.

Show raw files