알고리즘/구현,시뮬
BOJ - 25306 ) 연속 XOR
개발자가될수있을까?
2022. 6. 29. 22:31


https://www.acmicpc.net/problem/25306
25306번: 연속 XOR
3에서 5까지의 자연수는 3, 4, 5로, 세 개 존재한다. 세 수를 XOR한 값은 (3 XOR 4) XOR 5 = 7 XOR 5 = 2 이다.
www.acmicpc.net
XOR연산(결합,교환) 특성에 의해 1-(A-1) 까지와 1-B까지 숫자에 대한 XOR이
A-B까지 XOR이 같게된다.
첫번째 자리를 제외한 비트를 나열해보면, 모두 주기를 띄고있다.( 0011 00001111 ... )
따라서 2^N으로 비트를 밀면서 해당 번째가 00에속하는지 11에 속하는지 먼저 판단하고,
11영역에 속한다면, 해당 1의 누적개수가 짝수개면 0 홀수개면 1로 비트를 바꾸어준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long n = Long.parseLong(st.nextToken());
long m = Long.parseLong(st.nextToken());
System.out.println((XOR(n-1)
^XOR(m)));
}
private static long XOR(long num) {
long answer =0;
if(num%2==1) {
if( ((num+1)/2)%2==1) {answer++;}
} else {
if( ((num)/2)%2==1) {answer++;}
}
for(long i=1;i<=num;i*=2) {
if( (num%(i*2))>=i&&
(((num%(i*2))&1)==0) ) {
answer ^=i;
}
}
return answer;
}
}
