문제 링크
- https://icpc.me/23381
문제 출처
- 2021 BAPC G번
사용 알고리즘
- 랜덤
풀이
$a_0, a_1, \cdots, a_{n-1} = 0, a_n = 1$인 쿼리의 결과를 이용해 마지막 연산자인 $op_n$을 알아낼 수 있습니다. 1이면 +
, 0이면 *
입니다.
비슷하게, $a_0, a_1, \cdots, a_{n-2} = 0, a_{n-1} = 1$, 그리고 $a_n$은 $op_n$의 항등원인 쿼리의 결과를 이용해 $op_{n-1}$을 알아낼 수 있습니다. 이 방법을 연속해서 사용하면 뒤에 있는 연산자부터 하나씩, 총 $n$번의 쿼리로 모든 연산자의 값을 구할 수 있습니다.
쿼리의 개수를 줄이는 것은 간단합니다. $4000 / 275 \leq 15$이므로 한 번의 쿼리를 이용해서 연산자를 15개씩 알아내면 됩니다. 가능한 $2^{15}$가지의 연산자들에 대해 서로 다른 결과를 내는 길이 15짜리 수열을 알고 있다면 쿼리마다 15개씩 알아낼 수 있습니다. 이러한 수열은 랜덤한 수열을 몇 가지 생성하다 보면 빠르게 찾을 수 있습니다.
전체 코드
1 |
|