Hi to all!
Because of small constraints we can iterate i from 1 to n, iterate j from 1 to m, check that b j divide a i and find max value of . Then we can start this process again and find amount of the pairs in which is max value.
Let amagine we have values of r 1, p 1 and p 2. Then:
Now it’s easy of understand, we must take maximum value of r 1 and p 1, and minimum value of p 2 to maximize r 2. You could not use three cycles for iterating all values, but you could find property above about at least one value and use two cycles.
Let’s iterate n 1 = max(a, c) and m 1 = max(b, d) — sides of bounding box. Then we can calculate value of function f(n 1, m 1, s), and add to the answer f(n 1, m 1, s)·(n - n 1 + 1)·(m - m 1 + 1), where two lastest brackets mean amount of placing this bounding box to a field n × m.
Now we must calculate f(n 1, m 1, s). At first, if n 1·m 1 = s then the result of the function is 2·(⌊ n 1 / 2⌋ + 1)·(⌊ m 1 / 2⌋ + 1) - 1 (you can prove it to youself).
If n 1·m 1 > s then we must to cut 4 corners which are equal rectangles with square . We can iterate length of a one of sides, calculate another side, check all constraints and add 2 to the result of the function for all such pairs of sides.
The time of a solution is O(n 3), but it’s with very small constant, less then 1.
You can use only two features about this problem: the solution is independenly for all regions and there are only 2 possible situations: all children are in exactly one bus or organizers must take minimum amount of bus such no children got a compensation. It’s bad idea to place some children to hot bus and to place some children to cool bus simultaneously.
For solving you must calculate this 2 values and get minimum.
Will be soon…