Editorial for IOI '14 Practice Task 1 - Square
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.
This problem can be solved by dynamic programming. We define a function to be the size of the largest square with
as its lower-left corner. There are two cases in the recursion of
.
- If
then
will be
if the grid at
is usable, and
will be
if the grid at
is defective.
- If
, then it is easy to see that
is
.
- If either
or
is
, i.e., it is at the top row or right column, then
is
if the grid is usable, or
otherwise.
It is easy to see that the dynamic programming runs in time, where
is the size of the materials. Then we can scan
for the largest value and count them to find the answer.
Comments
Fun fact: you can also AC using a sparse table and binary search in
time.
https://dmoj.ca/submission/4369199