BOJ 31294 Convolution
BOJ 31294 Convolution
문제 내용
길이 의 배열 와 가 주어집니다. 다음의 식으로 정의되는 배열 를 구하세요. 식에서 는 와 의 bitwise OR를 의미합니다.
입력
첫 줄에는 의 값과 테스트 케이스의 개수 가 주어집니다. (, )
그 다음 줄에는 각 테스트 케이스를 생성할 파라미터 값 와 가 주어집니다. ()
와 의 값을 이용하는 PRNG 함수 rand16을 다음과 같이 정의합시다.
state = 0
def rand16():
global state
state = (state * a + b) % (2 ** 32)
return state >> 16그러면 각각의 테스트 케이스에 대해, 먼저 rand16을 번 호출하여 순서대로 배열 의 원소를 얻고, 그 다음 rand16을 번 호출하여 순서대로 배열 의 원소를 얻어야 합니다.
state는 테스트 케이스 사이에 초기화되지 않습니다.
출력
각 테스트 케이스에 대해, 를 출력합니다.
문제 풀이
스포일러
OR convolution의 기본 문제입니다. 이 문제는 다음의 과정을 거쳐서 풀 수 있습니다.
- 먼저 배열 와 에 SOS DP를 합니다. 그러면 는 의 1 비트의 부분집합을 1로 갖는 인덱스 에 대한 의 합입니다.
- 그 다음, 각각의 에 대해 를 구하여 로 둡니다. 이러한 의 값은 가 의 1 비트의 부분집합이 되는 와 에 대해 의 합입니다.
- 마지막으로, 배열 에 비트 포함배제를 하면 를 얻을 수 있습니다.
Last updated on