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

 

1322번: X와 K

첫째 줄에 X와 K가 주어진다. X와 K는 2,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

[난이도] Gold4
[유형] 비트마스크

[풀이]
X + Y = X | Y 를 만족하기 위해서는
Y를 2진수로 표현했을 때의 1은 X의 2진수가 0인 비트에만 넣을 수 있다. (반올림이 발생하기 때문에)
그러므로 K를 2진수로 표현했을 때의 비트를 하나씩 Y에서 비트가 0인 부분에 채워넣고, Y에서 비트가 1인 부분에는
0을 채워넣은 값이 정답이다.

 

#include <cstdio>
using ll = long long;
ll X,K,ret;
int main(){
    scanf("%lld%lld",&X,&K);
    int j=0;
    for(int i=0;;i++){
        if(!((X>>i)&1)){
            ret |= ((K>>j)&1) << i;
            j++;
            if(!(K>>j)) break;
        }
    }   
    printf("%lld",ret);
}



https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/1322.cpp

+ Recent posts