미니언 퀴즈

시간 제한2초메모리 제한512 MB

요약
A개의 AND 연산자와 B개의 OR 연산자, 그리고 A+B+1개의 수가 주어질 때, 수 사이에 연산자를 배치해 왼쪽부터 계산한 결과가 최대가 되도록 만든다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 그리디, 구현
정답자
아직 제출이 없습니다

문제

미니언들이 마침내 새 주인을 찾았다. 이번 주인은 수학 교수로, 미니언들에게 수학을 가르치려고 열심히 노력하고 있다. 그는 1년 넘게 미니언들에게 비트 연산자를 가르쳐 왔다! 미니언들은 AND(&)와 OR(|) 연산자를 배웠고, 이제 그들을 시험할 퀴즈를 볼 차례이다.

퀴즈는 아주 간단하다. AND(&) 연산자의 개수 A, OR(|) 연산자의 개수 B, 그리고 (A + B + 1)개의 정수가 주어진다. 미니언들은 주어진 음이 아닌 정수 사이에 '&'와 '|' 연산자를 순서를 바꾸지 않고 끼워 넣어 얻을 수 있는 최댓값을 구해야 한다.

이 퀴즈에는 특별한 조건이 하나 더 있다. 연산자는 왼쪽에서 오른쪽으로 계산해야 한다.

입력

입력의 첫 줄에는 테스트 케이스의 수 T가 주어진다 (1 ≤ T ≤ 100). 그 뒤에 T개의 테스트 케이스가 이어진다.

각 테스트 케이스는 2줄로 이루어진다. 첫 줄에는 AND(&)와 OR(|) 연산자의 개수를 나타내는 두 정수 A와 B가 주어진다 (0 ≤ A, B ≤ 10, 000). 둘째 줄에는 (A + B + 1)개의 64비트 음이 아닌 정수가 하나의 공백으로 구분되어 주어진다.

출력

각 테스트 케이스마다 주어진 정수 사이에 연산자를 끼워 넣어 얻을 수 있는 최댓값을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    2
    1 1
    1 4 5
    2 2
    2 3 11 4 5
    
    예상 출력
    5
    7