#include <stdbool.h> //to use true, false keywords
#include <stdint.h> //to use int_32
#include <stdio.h>
bool
isSubarrayExistUtil(
int
arr[],
int
K,
int
N)
{
int
totalXOR = 0;
int
SubarrayXOR = 0;
for
(
int
i = 0; i < N; i++)
totalXOR ^= arr[i];
for
(
int
i = 0; i < K; i++)
SubarrayXOR ^= arr[i];
if
(SubarrayXOR == (totalXOR ^ SubarrayXOR))
return
true
;
for
(
int
i = K; i < N; i++) {
SubarrayXOR ^= arr[i];
SubarrayXOR ^= arr[i - 1];
if
(SubarrayXOR == (totalXOR ^ SubarrayXOR))
return
true
;
}
return
false
;
}
void
isSubarrayExist(
int
arr[],
int
K,
int
N)
{
if
(isSubarrayExistUtil(arr, K, N))
printf
(
"YES\n"
);
else
printf
(
"NO\n"
);
}
int32_t main()
{
int
arr[] = { 2, 3, 3, 5, 7, 7, 3, 4 };
int
N =
sizeof
(arr) /
sizeof
(arr[0]);
int
K = 5;
isSubarrayExist(arr, K, N);
}