P||k Cutting
시간 제한5초메모리 제한1024 MB
길이 N인 배열에서 원소들의 비트 OR 값이 K와 같은 연속 구간의 개수를 구합니다.
문제
농부는 돼지고기를 포장해야 합니다. 작업에 며칠이 걸릴 수 있어서, 농부는 포장을 진행할 수 있는 날 일을 미리 배정했습니다. 포장 작업 전체는 적어도 하루 이상인 연속된 날들 안에서 끝나야 합니다. 이렇게 연속된 날들의 구간은 배정된 날을 모두 포함하지 않아도 됩니다.
농부는 황소와 당나귀를 불러 포장 작업 전체를 맡겼습니다. 황소와 당나귀는 공짜로 일하지 않으므로, 농부는 각 날마다 동물이 그날 일할 경우 지급하려는 쿠키 수를 정했습니다.
황소는 그리 똑똑한 동물이 아니어서, 연속된 여러 날의 쿠키 수를 더하는 고급 수학에 반대했습니다. 황소는 언제, 얼마나 오래 일하든 고정된 쿠키 개를 받아야 한다고 주장합니다.
반면 당나귀는 덧셈이 너무 평범한 연산이라고 여겼고, 각 날에 제시된 쿠키 수의 비트 OR 값을 받겠다고 요구했습니다.
두 정수의 비트 OR은 두 수를 이진수로 나타낸 뒤, 둘 중 하나라도 1인 자리에만 결과에 1을 남기는 방식으로 계산합니다. 예를 들어 9와 5의 비트 OR은 13입니다.
또한 황소와 당나귀는 두 동물이 받는 총액이 정확히 같을 때만 일합니다. 농부는 더 이상 동물들과 엮이고 싶지 않아 이 조건에 동의했고, 작업을 배정할 수 있는 방법이 몇 가지인지 알고 싶어 합니다. 따라서 여러분의 과제는 동물들이 일하는 데 동의하는 서로 다른 공집합이 아닌 날짜 구간의 개수를 세는 것입니다. 구간끼리는 서로 겹쳐도 됩니다.
입력
첫 줄에는 두 정수 , (, )가 주어집니다. 은 농장에서 돼지고기를 포장할 수 있는 전체 날의 수이고, 는 황소가 받기를 원하는 쿠키 수입니다.
둘째 줄에는 개의 정수 ()가 주어집니다. 는 번째 날에 제시된 쿠키 수입니다.
출력
황소와 당나귀가 함께 일하는 데 동의하는 구간의 개수 를 한 줄에 출력합니다.