Editorial for COCI '09 Contest 7 #5 Kraljevi
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
To start, note that simply calculating all pairs of distances is time complexity and scores
of points.
For of points, we use dynamic programming in
time complexity. First, we find the sum of distances between all kings with coordinates
and
, and on the second pass with
and
. To find the sum, we start at
and work left to right / top to bottom. We need the following:
row_count(X, Y), row_sum(X, Y)
- number of pieces in the fields with coordinates,
and the sum of distances to the field
.
col_count(X, Y), col_sum(X, Y)
- same as row but for columnsdp_count(X, Y), dp_sum(X, Y)
- same but for the lower left part of the board, in other words for fieldsand
.
For dynamic programming, we need the following relations:
row_sum(X, Y) = row_sum(X, Y-1) + row_count(X, Y-1)
row_count(X, Y) = row_count(X, Y-1) + B(X, Y)
col_sum(X, Y) = col_sum(X-1, Y) + col_count(X-1, Y)
col_count(X, Y) = col_count(X-1, Y) + B(X, Y)
dp_sum(X, Y) = dp_sum(X-1, Y-1) + dp_count(X-1, Y-1) + row_sum(X, Y) + col_sum(X, Y) + B(X, Y)
dp_count(X, Y) = dp_count(X-1, Y-1) + row_count(X, Y) + col_count(X, Y) + B(X, Y)
Where is
if the field
contains the figure of the current player, and
otherwise.
Now we can easily see that the sum of field to other pieces is:
sum(X, Y) = dp_sum(X-1, Y-1) + row_sum(X, Y) + col_sum(X, Y)
Comments
A simpler solution is to translate (x,y) -> (x+y,x-y) (or similar), so the problem becomes sum of Manhattan distances instead of Chebyshev. Then you can independently sum the contribution from x and y coordinates with sorting or brute force.