PROBLEM STATEMENT
Limak is a grizzly bear.
He is currently making plans to attack Deerland.
Deerland has N cities, numbered from 0 to N-1.
The cities are all connected together by a network of roads.
There are exactly N-1 bidirectional roads, each connecting two cities.
(Hence, the topology of Deerland is a tree.)
Limak will attack each city in Deerland exactly once.
For each i, when he attacks city i, there are two possible outcomes:
With probability 1/(i+1) the city will defend itself successfully.
In all other cases the city is destroyed by Limak. The city disappears from Deerland, along with
all roads that led into the city.
Let's define a region as a connected component of Deerland.
In other words, a region is a maximal group of cities such that the existing roads allow us to
travel between any two cities in the group.
Initially, the entire Deerland is a single region.
After Limak's N attacks Deerland will be divided into one or more regions.
The strength of a region is the square of the number of cities it contains.
You are given a description of Deerland in a format that is specified below.
Let E be the expected value of the sum of strengths of all regions after Limak attacks Deerland.
It can be proved that E*N! is an integer.
Return this integer modulo 1,000,000,007.
The description of Deerland is provided in the form of a pseudorandom generator.
You are given the ints N, R0, A, B, M, LOW, and HIGH.
As defined above, N is the number of cities in Deerland.
The list of roads is generated by the pseudocode below.
R = R0;
BILLION = 1000000000;
for i between 1 and N-1, inclusive:
R = (A * R + B) modulo M;
MIN = ((i-1) * LOW) / BILLION;
MAX = ((i-1) * HIGH) / BILLION;
there is a road between city i and city MIN + (R modulo (MAX-MIN+1));
Both divisions in the pseudocode are integer divisions.
(Integer division rounds down. For example, 29/10 is 2.)
You may assume that the pseudocode always generates a valid tree.
Watch out for integer overflow when implementing it.
DEFINITION
Class:BearAttacks
Method:expectedValue
Parameters:int, int, int, int, int, int, int
Returns:int
Method signature:int expectedValue(int N, int R0, int A, int B, int M, int LOW, int HIGH)
CONSTRAINTS
-N will be between 1 and 1,000,000, inclusive.
-M will be between 1 and 1,000,000,000, inclusive.
-R0, A and B will be between 0 and M-1, inclusive.
-LOW and HIGH will be between 0 and 1,000,000,000, inclusive.
-LOW will not be greater than HIGH.
EXAMPLES
0)
3
0
2
3
100
938593850
1000000000
Returns: 21
There are N=3 cities.
The generator outputs that the two roads are 1-0 and 2-1.
Hence, Deerland is the path 0-1-2.
Here is what may happen:
With probability (1/1) * (1/2) * (1/3) = 1/6 all three cities survive. In this case we have a
single region with strength 9.
With probability (1/1) * (1/2) * (2/3) = 2/6 only cities 0 and 1 survive. We have one region with
strength 4.
With probability (1/1) * (1/2) * (1/3) = 1/6 only cities 0 and 2 survive. Here we have two
regions, each with strength 1, hence the total strength is 2.
With probability (1/1) * (1/2) * (2/3) = 2/6 only city 0 survives. There is only one region and
its strength is 1.
Therefore, the expected sum of regions' strengths is (1/6)*9 + (2/6)*4 + (1/6)*2 + (2/6)*1 = 21/6.
The correct return value is ( (21/6) * N! ) modulo 1,000,000,007, which is 21.
1)
3
0
0
0
1
0
0
Returns: 23
Again there are three cities, but now the roads are 1-0 and 2-0.
A different set of roads leads to a different answer.
2)
6
303840291
848660283
395739574
950123456
0
1000000000
Returns: 3856
Six cities. Roads: 1-0, 2-1, 3-1, 4-3, 5-1.
3)
1
0
0
0
1
0
0
Returns: 1
4)
19
384038999
938592393
692854433
1000000000
300000000
600000000
Returns: 473263988
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.