using
System;
class
GFG{
static
int
findCount0th(
int
[] arr,
int
N,
int
K)
{
int
oddsum = 0, evensum = 0;
for
(
int
i = 1; i < N; i += 2)
{
oddsum += arr[i];
}
for
(
int
i = 2; i < N; i += 2)
{
evensum += arr[i];
}
if
(Math.Abs(oddsum - evensum) == K)
return
1;
else
return
0;
}
static
int
findCount1st(
int
[] arr,
int
N,
int
K)
{
int
evensum = arr[0], oddsum = 0;
for
(
int
i = 3; i < N; i += 2)
{
evensum += arr[i];
}
for
(
int
i = 2; i < N; i += 2)
{
oddsum += arr[i];
}
if
(Math.Abs(oddsum - evensum) == K)
return
1;
else
return
0;
}
static
int
countTimes(
int
[] arr,
int
K)
{
int
N = (
int
)arr.Length;
if
(N == 1)
return
1;
if
(N < 3)
return
0;
if
(N == 3)
{
int
cnt = 0;
cnt += (Math.Abs(arr[0] - arr[1]) == K ? 1 : 0) +
(Math.Abs(arr[2] - arr[1]) == K ? 1 : 0) +
(Math.Abs(arr[0] - arr[2]) == K ? 1 : 0);
return
cnt;
}
int
[] prefix =
new
int
[N + 2];
int
[] suffix =
new
int
[N + 2];
for
(
int
i = 0; i < N + 2; i++)
{
prefix[i] = 0;
}
for
(
int
i = 0; i < N + 2; i++)
{
suffix[i] = 0;
}
prefix[0] = arr[0];
prefix[1] = arr[1];
suffix[N - 1] = arr[N - 1];
suffix[N - 2] = arr[N - 2];
for
(
int
i = 2; i < N; i += 2)
{
prefix[i] = arr[i] + prefix[i - 2];
}
for
(
int
i = 3; i < N; i += 2)
{
prefix[i] = arr[i] + prefix[i - 2];
}
for
(
int
i = N - 3; i >= 0; i -= 2)
{
suffix[i] = arr[i] + suffix[i + 2];
}
for
(
int
i = N - 4; i >= 0; i -= 2)
{
suffix[i] = arr[i] + suffix[i + 2];
}
int
count = 0;
for
(
int
i = 2; i < N; i++)
{
if
(Math.Abs(prefix[i - 1] + suffix[i + 2] -
prefix[i - 2] - suffix[i + 1]) == K)
{
count++;
}
}
count += findCount0th(arr, N, K);
count += findCount1st(arr, N, K);
return
count;
}
public
static
void
Main()
{
int
[] arr = { 1, 2, 4, 5, 6 };
int
K = 2;
Console.WriteLine(countTimes(arr, K));
}
}