Problem Statement
We have a sequence of N positive integers: a[0] through a[N-1].
You do not know these integers.
All you know is the number of trailing zeros in their binary representations.
You are given a
For example, suppose that a[0]=40. In binary, 40 is 101000 which ends in three zeros. Therefore, d[0] will be 3.
You like arithmetic sequences with difference 1. (That is, sequences in which each element is 1 greater than the previous one. For example, {4,5,6,7}.) For simplicity, we will call these sequences "incrementing sequences".
You would like to count all non-empty contiguous subsequences of the sequence a[0], a[1], ..., a[N-1] that can be incrementing sequences (given the information you have in d).
More precisely: For each pair (i,j) such that 0 <= i <= j <= N-1, we ask the following question: "Given the values d[i] through d[j], is it possible that the values a[i] through a[j] form an incrementing sequence?"
For example, suppose that d = {0,1,0,2,1}. For i=0 and j=3 the answer is positive: it is possible that the values a[0] through a[3] are {1,2,3,4} which is an incrementing sequence. For i=1 and j=4 the answer is negative: there is no incrementing sequence with these numbers of trailing zeros in binary.
Compute and return the number of contiguous subsequences of a[0], a[1], ..., a[N-1] that can be incrementing sequences.
Definition
- Class:
- PotentialArithmeticSequence
- Method:
- numberOfSubsequences
- Parameters:
- int[]
- Returns:
- int
- Method signature:
- int numberOfSubsequences(int[] d)
- (be sure your method is public)
Constraints
- n will be between 1 and 50, inclusive.
- d will contain exactly N elements.
- Each element of d will be between 0 and 1,000,000,000 (10^9), inclusive.
Examples
{0,1,0,2,0,1,0}
Returns: 28
It is possible that the sequence a[0] through a[6] is {1,2,3,4,5,6,7}. All contiguous subsequences of this sequence are incrementing sequences.
{0,0,0,0,0,0,0}
Returns: 7
{0,0,0,0,1,1,1}
Returns: 8
{0,100,0,2,0}
Returns: 11
{1,11,3,0,1,0,1,0,1,0,1,0,3,0,2,0,0,0,0,1,2,3,20}
Returns: 49
{1000000000,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0}
Returns: 1275
{0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,999999999}
Returns: 1275
{0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4}
Returns: 1275
{0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2}
Returns: 1275
{1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}
Returns: 1275
{2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0}
Returns: 1275
{0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4}
Returns: 1275
{1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,395813642,3,0,1,0,2,0,1,0,4,0,373805363,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,625420870}
Returns: 424
{734778810,1,478155934,2,0,1,305408620,4,0,1,0,2,0,1,0,3,0,1,915880938,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1}
Returns: 573
{0,4,0,1,0,2,358462695,1,0,485730421,0,1,0,2,0,1,0,5,0,1,0,2,0,1,793512937,178703970,0,1,0,2,0,56439854,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6}
Returns: 351
{1,0,2,0,143183056,0,3,0,1,368457178,2,0,1,0,4,0,1,0,2,0,1,0,521448595,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,688509958,1,0,2,0,1,474627720,4,0,1,0}
Returns: 330
{1,0,3,0,1,0,2,0,1,328775416,703983279,0,1,0,2,0,1,0,3,0,1,569029877,2,0,1,0,481526113,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,68708759,0,1,0}
Returns: 435
{0,1,0,1,0,1,0,3,0,1,0,8,0,1,0,7,0,1,0,9,0,1,0,8,0,1,0,3,0,1,0,2,0,1,0,1,0,1,0,1,0,1,0,3,0,1,0,0}
Returns: 229
{0,1,0,5,0,1,0,8,0,1,0,6,0,1,0,0,0,1,0,4,0,1,0,8,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1}
Returns: 288
{0,1,0,9,0,1,0,4,0,1,0,5,0,1,0,9,0,1,0,0,0,1,0,3,0,1,0,3,0,1,0,7,0,1,0,8,0,1,0,8,0,1,0,7,0,1,0,6}
Returns: 237
{0,1,0,2,0,1,0,8,0,1,0,8,0,1,0,8,0,1,0,2,0,1,0,6,0,1,0,4,0,1,0,8,0,1,0,8,0,1,0,9,0,1,0}
Returns: 274
{0,1,0,2,0,1,0,6,0,1,0,4,0,1,0,6,0,1,0,1,0,1,0,2,0,1,0,0,0,1,0,9,0,1,0,4,0,1,0,7,0}
Returns: 202
{0,3,1,4,0,2,3,1,0,2,4,1,1,0,1,3,3,1,0,1,0,3,2,2,3,4,3,2,4,4,2,3,3,1,4,3,0,3}
Returns: 55
{2,4,1,2,0,2,0,3,4,3,1,2,1,2,2,4,4,4,4,3,2,4,4,3,0,3,4,1,2,0,4,3,0,4,4,2,4,4,4,2,0,0,0,3,1,1,1,4,2}
Returns: 62
{0,1,0,2,4,0,4,3,2,4,2,4,2,3,1,0,4,4,3,1,1,1,3,1,1,2,2}
Returns: 38
{1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000,1000000000}
Returns: 50
{1,0,0,0,1,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1,1,0,1,1,0,0,1,1,0,0,0,1,0,0,0,1,1}
Returns: 72
{0}
Returns: 1
{1}
Returns: 1
{12345}
Returns: 1
{1000000000}
Returns: 1
{1000000000,999999999,1000000000,1000000000,999999999,999999999,1000000000,1000000000,1000000000,999999999,999999999,1000000000,1000000000,1000000000,999999999,999999999,999999999,1000000000,1000000000,1000000000,999999999,1000000000,1000000000,1000000000,1000000000}
Returns: 25
{1,2,1,3,1,2,1,4,1,2,0}
Returns: 12
{0,2,0,1,2,1,0,2,0,4,0,4,4,4,5,6,5,9,0,12,13,12,14,13,12,13,12,11,10,9,8,7,6,5,4,3,2,1,0}
Returns: 58
{1, 11, 3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 2, 0, 0, 0, 0, 1, 2, 3, 20 }
Returns: 49
{0, 101, 0, 2, 0 }
Returns: 11
{3, 0, 1, 0, 3 }
Returns: 14
{0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 999, 0, 1, 0, 2, 0, 1, 0, 100, 0, 1, 0, 2, 0, 1, 0, 4 }
Returns: 730
{80, 96, 98 }
Returns: 3
{3, 0, 1, 0, 2, 0, 1 }
Returns: 28
{0, 1, 0, 2, 0, 1, 0, 2 }
Returns: 32
{5, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 199999999 }
Returns: 180
{3, 0, 1, 0, 5 }
Returns: 14
{33, 0, 2, 0 }
Returns: 8
{1, 0, 23 }
Returns: 6
{3, 0, 1, 0, 2 }
Returns: 15
{101, 0, 1, 0, 2, 0, 1, 0, 10002, 0 }
Returns: 53
{0, 4, 0, 1, 0, 2, 0, 3 }
Returns: 30
{0, 1, 0, 8, 0, 1, 0, 8, 0, 1, 0, 8, 0, 1, 0, 8, 0, 1, 0, 8 }
Returns: 98
{0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 2 }
Returns: 54
{7, 7, 5, 6, 4, 0, 2, 5, 9, 7, 3, 6, 6, 3, 3, 2, 1, 7, 1, 2, 4, 5, 1, 3, 9, 7, 9, 9, 9, 0, 5, 5, 3, 4, 5, 2, 8, 1, 7, 7, 3, 4, 0, 8, 0, 1, 5, 6, 5, 5 }
Returns: 61
{0, 1, 0, 3, 0, 1, 0, 14, 0, 1, 0, 7, 0, 1, 0, 23, 0 }
Returns: 81
{0, 8, 0, 8, 0 }
Returns: 11
{5, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2 }
Returns: 414
{13, 1, 0, 0, 1945354, 4220075, 15, 1, 1, 2, 1, 2, 2, 1, 9, 14, 15, 5481180, 1, 2, 7383996, 15, 1, 0, 1, 0, 9, 2, 2, 0, 0, 2, 15, 0, 2, 2, 5137198, 5423434, 2, 9450738, 0, 1, 0, 16, 0, 0, 1, 1, 3037682, 1225355 }
Returns: 77
{0, 21950, 0, 95103, 0, 5436 }
Returns: 13
{0, 2, 0, 1, 0, 100 }
Returns: 21
{1000000000, 0, 1 }
Returns: 6
{6, 5, 6, 4, 1, 0, 1, 5, 2, 4, 5, 4, 4, 5, 2, 5, 1, 7, 3, 3, 4, 8, 8, 3, 0, 3, 3, 2, 4, 1, 7, 4, 0, 1, 0, 2, 0, 6, 1, 7, 3, 5, 9, 3, 5, 7, 6, 4, 1, 9 }
Returns: 70
{15, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }
Returns: 528
{3, 0, 1, 0, 2, 0, 1, 0, 10000, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0 }
Returns: 1275
{1000, 0, 1, 100000, 0, 100000, 0, 1, 10000000 }
Returns: 19