반응형

https://www.acmicpc.net/problem/10464

 

10464번: XOR

입력의 첫 번째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 1000)가 주어진다. 다음 T 개의 줄에는 두 개의 정수 S와 F가 주어진다. (1 ≤ S ≤ F ≤ 1 000 000 000)

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. 1부터 N까지 XOR한 값을 구해보면 다음과 같은 규칙을 발견할 수 있습니다.

1 -> 1

2 -> 3

3 -> 0

4 -> 4

5 -> 1

6 -> 7

7 -> 0

8 -> 8

9 -> 1

.

.

.

N

즉, N % 4의 값이 1이면 1, 2이면 N + 1, 3이면 0 그리고 0이면 N입니다.

 

2. S부터 F까지의 값을 XOR한 값은 1부터 F까지 XOR한 값과 1부터 S - 1까지 XOR한 값을 XOR하면 됩니다.

 

3. 2의 값을 출력합니다.

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
 
using namespace std;
 
int XOR(int num)
{
    int mod = num % 4;
 
    if (mod == 0return num;
    if (mod == 1return 1;
    if (mod == 2return num + 1;
    if (mod == 3return 0;
}
 
int main()
{
    int T;
    scanf("%d"&T);
 
    for (int t = 0; t < T; t++) {
        int S, F;
        scanf("%d %d"&S, &F);
        
        printf("%d\n", XOR(S - 1) ^ XOR(F));
    }
}
cs

 

반응형

+ Recent posts