XOR Bitshift (Hard) Batch
| 시간 제한 | 메모리 제한 | 제출 횟수 | 제출한 사람 수 | 해결한 사람 수 | 정답률 |
|---|---|---|---|---|---|
| 1000 ms | 1024 MiB | 1 | 1 | 1 | 100.00% |
길이 $N$의 양의 정수 배열 $A$, $B$가 주어진다.
이때 아래의 연산들을 $70,000$번 이하로 사용하여 배열 $A$를 $B$와 같게 만들려고 한다.
A[i] = A[i] ^ A[j](이때 $i \ne j$일 필요는 없다.)A[i] = A[i] << 1(즉, $A[i] := A[i] \times 2$)A[i] = A[i] >> 1(즉, $A[i] := \lfloor {A[i] \over 2} \rfloor$)
^ 기호는 Bitwise XOR 연산을 의미한다.
연산 과정에서 모든 $A[i]$의 값은 항상 $0$ 이상 $10^{18}$ 이하여야 한다. 즉, 어떤 시점에서도 $A[i]$가 $10^{18}$을 초과하면 안 된다.
위 연산들을 $70,000$번 이하로 사용하여 배열 $A$를 배열 $B$와 정확히 같게 만들 수 있는지 판단하라.
입력 형식
첫째 줄에 배열의 길이 $N$이 주어진다. ($2 \le N \le 10,000$)
둘째 줄에 $N$개의 정수 $A[1], A[2], \cdots ,A[N]$이 공백으로 구분되어 주어진다. ($1 \le A[i] \le 10^9$)
셋째 줄에 $N$개의 정수 $B[1], B[2], \cdots ,B[N]$이 공백으로 구분되어 주어진다. ($1 \le B[i] \le 10^9$)
출력 형식
첫째 줄에 두 배열을 같게 만들 수 있는 경우 $\texttt{YES}$, 그렇지 않으면 $\texttt{NO}$를 출력한다.
둘째 줄에 사용한 연산 횟수 $k$ 를 출력한다. ($0 \leq k \leq 70 ,000$)
다음 $k$개의 줄에 사용한 연산을 순서대로 출력한다.
이때 연산의 출력 형식은 다음과 같다:
1 i j(A[i] = A[i] ^ A[j])2 i(A[i] = A[i] << 1)3 i(A[i] = A[i] >> 1)
가능한 방법이 여럿일 경우 그중 아무 것이나 출력한다.
예제
예제 1
입력
3
1 2 3
1 2 3
출력
YES
0
예제 2
입력
4
1 2 3 4
5 6 7 8
출력
YES
4
1 1 4
1 2 4
1 3 4
2 4
