※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 25306번 문제인 연속 XOR이다.
문제는 아래 링크를 확인하자.

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

임의의 짝수 x에 대하여 x와 x+1의 xor 연산값은 항상 1이 된다는 성질을 이용하자.

1은 짝수개 xor하면 0, 홀수번 xor하면 1이라는 점까지 이용하면 문제에서 요구하는 xor값을 편하게 계산해낼 수 있다.

 

C++에서 두 정수 x와 y의 xor값은 x^y와 같이 계산할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;
typedef long long ll;

ll A, B;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	ll ans = 0;
	
	cin >> A >> B;

	if (A == B) {
		cout << A;
		return 0;
	}
	else if (A + 1 == B) {
		cout << (A ^ B);
		return 0;
	}

	if (A & 1) ans ^= A++;
	if (!(B & 1)) ans ^= B--;
	if (((B - A) / 2 + 1) & 1) cout << (ans ^ 1);
	else cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 25304 // C++] 영수증  (0) 2022.06.27
[BOJ 25308 // C++] 방사형 그래프  (0) 2022.06.27
[BOJ 25305 // C++] 커트라인  (0) 2022.06.27
[BOJ 20009 // C++] 형곤이의 소개팅  (0) 2022.06.27
[BOJ 15728 // C++] 에리 - 카드  (0) 2022.06.26

+ Recent posts