Problem Statement
A subset S of the set E is called invariant (with respect to f) if it has the following property: for any x in S, f[x] is also in S. For example, the entire set E is invariant (for any f). The empty set is always invariant as well.
Given is the
Definition
- Class:
- InvariantSets
- Method:
- countSets
- Parameters:
- int[]
- Returns:
- long
- Method signature:
- long countSets(int[] f)
- (be sure your method is public)
Notes
- You may assume that the return value will fit into integer type long.
Constraints
- f will have between 1 and 50 elements, inclusive.
- Each element of f will be between 0 and n-1, inclusive, where n is the number of elements of f.
Examples
{1,0,0,0}
Returns: 5
The invariant sets are: {}, {0,1}, {0,1,2}, {0,1,3}, {0,1,2,3}.
{1,2,0}
Returns: 2
There are only 2 invariants sets: {} and {0,1,2}.
{0,0,1,2}
Returns: 5
The invariant sets are: {}, {0}, {0,1}, {0,1,2}, {0,1,2,3}.
{0,1,2,3,4,5}
Returns: 64
Every set is invariant when f(x)=x for all x.
{12, 10, 0, 4, 0, 6, 3, 8, 9, 14, 1, 5, 6, 12, 5}
Returns: 90
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,19,21,22,23,24,25,26,27,28,28}
Returns: 210
Two paths.
{10, 2, 2, 7, 4, 1, 13, 6, 9, 10, 6, 8, 8, 1, 4}
Returns: 252
{1, 9, 6, 8, 13, 7, 12, 4, 5, 13, 0, 9, 5, 2, 7}
Returns: 55
{14, 0, 11, 11, 10, 11, 9, 11, 0, 6, 12, 14, 7, 7, 4}
Returns: 162
{0, 7, 5, 13, 9, 3, 8, 9, 1, 5, 0, 4, 0, 10, 10}
Returns: 143
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 27, 26, 25, 28, 29, 30, 31, 32, 35, 34, 37, 36, 33, 38, 39, 40, 41, 48, 43, 44, 45, 46, 47, 42, 49}
Returns: 70368744177664
A lot of loops.
{0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23}
Returns: 667786811
Binary tree.
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 0, 27, 26, 25, 28, 30, 31, 32, 29, 35, 34, 37, 36, 33, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 38}
Returns: 512
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 27, 26, 25, 28, 29, 30, 31, 32, 35, 34, 37, 36, 33, 4, 5, 4, 20, 25, 15, 2}
Returns: 652298158080
{0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 30, 28, 23, 23, 30, 30, 30, 23, 5}}
Returns: 5306
{0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 10, 10, 3, 10, 10, 10, 12, 10, 10, 10, 20, 20, 10, 20, 20, 20, 20, 20, 20, 20, 40, 30, 30, 30, 30, 41, 30, 30, 30, 30, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40}
Returns: 13336537860225
Distorted stars.
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 30, 28, 23, 23, 30, 30, 30, 23, 5}}
Returns: 513
{19, 5, 13, 9, 19, 21, 4, 28, 20, 28, 1, 34, 15, 5, 19, 46, 29, 17, 26, 36, 29, 12, 2, 23, 30, 13, 3, 13, 15, 30, 36, 29, 46, 3, 0, 39, 27, 46, 31, 11, 46, 15, 1, 4, 21, 14, 14, 32, 22, 6}
Returns: 427714564
Random tests.
{25, 26, 0, 45, 47, 5, 18, 25, 10, 27, 42, 35, 29, 40, 27, 33, 6, 46, 35, 38, 19, 7, 46, 27, 44, 16, 12, 38, 20, 7, 39, 5, 38, 37, 32, 21, 49, 25, 1, 12, 4, 3, 18, 38, 34, 6, 12, 29, 10, 35}
Returns: 141165507
{33, 6, 43, 11, 26, 31, 11, 21, 12, 39, 9, 24, 33, 15, 7, 8, 23, 44, 21, 33, 17, 30, 24, 41, 11, 11, 6, 4, 5, 7, 32, 41, 0, 47, 24, 45, 28, 37, 42, 46, 33, 32, 14, 45, 6, 39, 11, 31, 27, 20}
Returns: 180219938
{1, 41, 40, 3, 39, 49, 20, 41, 18, 16, 7, 22, 15, 38, 42, 26, 17, 12, 5, 19, 46, 30, 46, 48, 24, 30, 24, 1, 23, 20, 24, 10, 34, 42, 41, 9, 23, 43, 47, 9, 10, 9, 34, 18, 42, 19, 17, 49, 5, 39}
Returns: 253505406
{29, 26, 44, 5, 11, 44, 34, 30, 8, 43, 25, 25, 14, 12, 39, 17, 6, 29, 40, 25, 19, 29, 32, 23, 2, 21, 40, 17, 31, 37, 27, 2, 18, 37, 47, 36, 0, 10, 49, 28, 0, 29, 0, 44, 9, 21, 26, 14, 39, 32}
Returns: 137008792
{29, 36, 4, 17, 11, 47, 9, 29, 21, 8, 6, 2, 14, 17, 8, 42, 20, 28, 33, 5, 12, 48, 36, 23, 42, 21, 9, 45, 11, 26, 22, 4, 20, 15, 47, 8, 41, 26, 3, 25, 45, 37, 31, 4, 18, 35, 17, 27, 5, 15}
Returns: 26202066
{14, 11, 26, 13, 26, 45, 6, 11, 41, 36, 18, 20, 41, 21, 48, 9, 42, 46, 13, 22, 28, 30, 24, 3, 40, 44, 34, 27, 27, 3, 35, 27, 49, 26, 32, 2, 34, 35, 48, 45, 31, 5, 45, 44, 10, 40, 24, 12, 17, 5}
Returns: 20665094
{38, 6, 14, 36, 10, 2, 37, 6, 31, 0, 20, 48, 46, 23, 2, 21, 46, 11, 3, 15, 1, 2, 38, 14, 49, 41, 47, 29, 31, 28, 49, 14, 20, 26, 37, 35, 34, 26, 37, 30, 34, 48, 46, 26, 21, 38, 43, 18, 41, 45}
Returns: 176801226
{26, 1, 38, 18, 8, 44, 7, 14, 31, 34, 46, 26, 28, 7, 1, 11, 41, 41, 28, 28, 42, 40, 10, 17, 34, 41, 12, 37, 22, 27, 49, 1, 13, 37, 40, 12, 14, 31, 25, 11, 6, 26, 19, 33, 45, 20, 18, 32, 17, 35}
Returns: 70705170
{37, 23, 35, 47, 14, 45, 28, 28, 30, 10, 37, 42, 40, 43, 39, 10, 28, 28, 29, 45, 44, 42, 20, 29, 37, 5, 42, 40, 43, 24, 21, 41, 9, 20, 13, 2, 29, 26, 7, 46, 12, 29, 3, 30, 9, 43, 44, 41, 14, 24}
Returns: 178488582
{12, 10, 0, 4, 0, 6, 3, 8, 9, 14, 1, 5, 6, 12, 5 }
Returns: 90
{46, 47, 15, 10, 33, 18, 0, 41, 41, 6, 43, 8, 15, 21, 48, 36, 23, 7, 25, 23, 28, 46, 34, 20, 19, 20, 12, 20, 18, 21, 38, 16, 20, 5, 29, 3, 23, 29, 47, 16, 35, 42, 26, 3, 13, 24, 39, 39, 34, 16 }
Returns: 37166148
{1, 1, 1, 1, 0, 6, 2, 1, 3, 2, 2, 2, 5, 6, 5, 3, 2, 4, 5, 4, 2, 2, 3, 4, 5, 5, 6, 7, 3, 4, 4, 5, 2, 3, 4, 5, 3, 2 }
Returns: 1703383111
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
Returns: 562949953421313
{1, 0, 0, 0 }
Returns: 5
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 }
Returns: 1125899906842624
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
Returns: 562949953421313
{41, 17, 34, 0, 19, 24, 28, 8, 12, 14, 5, 45, 31, 27, 11, 41, 45, 42, 27, 36, 41, 4, 2, 3, 42, 32, 21, 16, 18, 45, 47, 26, 21, 38, 19, 12, 17, 49, 35, 44, 3, 11, 22, 33, 23, 14, 41, 11, 3, 18 }
Returns: 17188169
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
Returns: 17592186044417