※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |