PROBLEM STATEMENT Petya likes donuts. He tries to find them everywhere. For example if he is given a grid where each cell contains a '0' or '.' he will construct donuts from the cells. To make the donuts: Petya first selects a rectangle of cells of width, w, and height, h, where both are at least 3. Then he removes a rectangular hole of width w-2 and height h-2 centered in the larger rectangle. For the remaining cells (a closed rectangular ring) to be a valid donut, all of the cells must contain '0' (because donuts are shaped like zeros). Cells in the hole can contain anything since they are not part of the donut. Here is an example with three overlapping donuts. .......... .00000000. .0......0. .0.000000. .0.0...00. .0.0...00. .0.000000. .0......0. .00000000. .......... The grid in this problem will be pseudo-randomly generated using the following method: You are given four ints: H (the grid height), W (the grid width), seed and threshold. Let x0=seed and for all i>=0 let xi+1 = (xi * 25173 + 13849) modulo 65536. Process the cells of the matrix in row major order (i.e., first row left to right, second row left to right, etc.). Each time you process a cell, calculate the next xi (starting with x1 for the upper left corner). If it is greater than or equal to threshold, the current cell will contain a '.', otherwise it will contain a '0'. Return the number of distinct donuts in the figure. Two donuts are considered distinct if they either have different width or height, or if the top left hand corner is in a different location (i.e., overlapping donuts are counted). DEFINITION Class:DonutsOnTheGrid Method:calc Parameters:int, int, int, int Returns:long long Method signature:long long calc(int H, int W, int seed, int threshold) NOTES -The random generation of the input is only for keeping the input size small. The author's solution does not depend on any properties of the generator, and would work fast enough for any input of allowed dimensions. CONSTRAINTS -H will be between 1 and 350, inclusive. -W will be between 1 and 350, inclusive. -seed will be between 0 and 65535, inclusive. -threshold will be between 0 and 65536, inclusive. EXAMPLES 0) 5 5 222 55555 Returns: 4 Here is an example of the grid: 00000 00.0. .0000 00.00 00000 1) 5 6 121 58000 Returns: 3 Here is the grid and three donuts in it: 00000. XXX... XXX... ..XXX. 0.0000 X.X... X.X... ..X.X. 0.000. X.X... X.X... ..XXX. 000.00 XXX... X.X... ...... 000.00 ...... XXX... ...... 2) 4 5 6 50000 Returns: 1 The grid is: 0.0.0 00000 .00.0 0.000 3) 4 4 1 65536 Returns: 9 Here, the grid is completely filled by 0's. There are 9 possible placements of a donut: XXX. XXX. .XXX .XXX .... .... XXXX .... XXXX X.X. X.X. .X.X .X.X XXX. .XXX X..X XXXX X..X XXX. X.X. .XXX .X.X X.X. .X.X XXXX X..X X..X .... XXX. .... .XXX XXX. .XXX .... XXXX XXXX This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2010, TopCoder, Inc. All rights reserved.