세 대의 기계
시간 제한2초메모리 제한512 MB
정수 쌍에 대한 세 가지 변환을 이용해 주어진 모든 카드 (1, a_i)를 만들 수 있는 시작 쌍 (a,b)의 개수를 센다.
문제
Spaceman Spoof's Functions에서 Abhilash, Brian, 그리고 당신 Spaceman Spoof는 사악한 Zargon으로부터 탈출할 수 있었다. 하지만 그들의 팀의 네 번째 멤버인 Aditya가 들어갈 자리가 없어 위험한 상황에 놓였다. 그는 Zargon 감옥에 갇혀 있으며, 세 대의 이상한 기계와 아무것도 쓰이지 않은 카드 한 장을 가지고 있다. 방을 나가려면 개의 잠긴 문을 통과해야 하며, 각 문은 특정한 두 수의 쌍이 적힌 카드가 있어야 열린다. Aditya는 자신의 카드에 정수 쌍 를 적을 수 있으며, 이때 양의 정수 에 대해 을 만족해야 한다. 그런 다음 그는 감방에 있는 세 대의 기계를 사용할 수 있는데, 각 기계는 카드 한 장 또는 두 장을 받아 새 카드를 출력하며, 입력으로 넣은 원래 카드들은 모두 돌려받는다:
- 첫 번째 기계는 가 적힌 카드를 받아 이 적힌 카드를 출력한다.
- 두 번째 기계는 가 적힌 카드를 받아 와 가 모두 짝수이면 가 적힌 카드를 출력한다. 그렇지 않으면 새 카드를 출력하지 않는다.
- 마지막 기계는 와 가 적힌 두 카드를 받아 가 적힌 카드를 출력한다.
Aditya에게는 시간이 무한히 많으므로 이 기계들을 필요한 만큼 사용할 수 있다. Zargon은 수다스러워서 Aditya는 간수들로부터 번째 잠긴 문은 가 적힌 카드로 열 수 있다는 것을 알아냈다. 정수 배열 이 주어졌을 때, Aditya가 처음 카드에 적는 정수 쌍 중 몇 개에 대해 Aditya가 결국 감옥을 탈출할 수 있는가?
입력
입력의 첫 번째 줄에는 공백으로 구분된 두 정수 과 )이 주어지며, 각각 Aditya의 감방을 지키는 잠긴 문의 수와 Aditya가 처음 카드에 적을 수 있는 최댓값이다.
다음 줄에는 개의 공백으로 구분된 정수 부터 까지가 주어지며, 이다. Aditya는 번째 문을 열기 위해 가 적힌 카드를 만들어야 한다. (는 서로 다를 필요가 없다.)
출력
인 시작 카드 중 Aditya가 탈출에 필요한 모든 카드를 만들 수 있는 것의 개수를 출력한다. 답은 C++ long long에 들어감이 보장된다.