Limak is a little polar bear. He doesn’t have many toys and thus he often plays with polynomials.
He considers a polynomial valid if its degree is n and its coefficients are integers not exceeding k by the absolute value. More formally:
Let a 0, a 1, …, a n denote the coefficients, so . Then, a polynomial P(x) is valid if all the following conditions are satisfied:
- a i is integer for every i;
- |a i| ≤ k for every i;
- a n ≠ 0.
Limak has recently got a valid polynomial P with coefficients a 0, a 1, a 2, …, a n. He noticed that P(2) ≠ 0 and he wants to change it. He is going to change one coefficient to get a valid polynomial Q of degree n that Q(2) = 0. Count the number of ways to do so. You should count two ways as a distinct if coefficients of target polynoms differ.
Input
The first line contains two integers n and k (1 ≤ n ≤ 200 000, 1 ≤ k ≤ 109) — the degree of the polynomial and the limit for absolute values of coefficients.
The second line contains n + 1 integers a 0, a 1, …, a n (|a i| ≤ k, a n ≠ 0) — describing a valid polynomial . It’s guaranteed that P(2) ≠ 0.
Output
Print the number of ways to change one coefficient to get a valid polynomial Q that Q(2) = 0.
Examples
input
3 1000000000
10 -9 -3 5
output
3
input
3 12
10 -9 -3 5
output
2
input
2 20
14 -7 19
output
0
Note
In the first sample, we are given a polynomial P(x) = 10 - 9x - 3x 2 + 5x 3.
Limak can change one coefficient in three ways:
- He can set a 0 = - 10. Then he would get Q(x) = - 10 - 9x - 3x 2 + 5x 3 and indeed Q(2) = - 10 - 18 - 12 + 40 = 0.
- Or he can set a 2 = - 8. Then Q(x) = 10 - 9x - 8x 2 + 5x 3 and indeed Q(2) = 10 - 18 - 32 + 40 = 0.
- Or he can set a 1 = - 19. Then Q(x) = 10 - 19x - 3x 2 + 5x 3 and indeed Q(2) = 10 - 38 - 12 + 40 = 0.
In the second sample, we are given the same polynomial. This time though, k is equal to 12 instead of 109. Two first of ways listed above are still valid but in the third way we would get |a 1| > k what is not allowed. Thus, the answer is 2 this time.
Solution:
#include <bits/stdc++.h> using namespace std; const long long inf = (long long) 1e18; const int N = 1234567; long long a[N], b[N]; int main() { int n, k; scanf("%d %d", &n, &k); n++; for (int i = 0; i < n; i++) { int foo; scanf("%d", &foo); a[i] = foo; } long long z = 0; int up = 0; for (int i = 0; i < n; i++) { z += a[i]; b[i] = z; if (z % 2 != 0) { break; } up++; z /= 2; } long long value = 0; int ans = 0; for (int i = n - 1; i >= 0; i--) { if (i <= up) { long long tmp = value * 2 + b[i]; long long z = a[i] - tmp; if (-k <= z && z <= k && (i != n - 1 || z != 0)) { ans++; } } value = value * 2 + a[i]; if (value < -inf || value > inf) { break; } } printf("%d\n", ans); return 0; }