aboutsummaryrefslogtreecommitdiff
path: root/min_flips_abc.cpp
blob: b51b2612cb1ec456c0ed8290aa2c7dcb506b0dac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 1318. Minimum Flips to Make a OR b Equal to c
#include "leetcode.h"

/*
 * given three positive numbers 'a, b, c'. return the minimum flips required in
 * some bits of 'a | b == c'. flip operation consists of changing any single bit
 * 1 to 0 or changing the bit 0 to 1 in their binary representation
 */

class Solution {
public:
  int minFlips(int a, int b, int c) {
    return __builtin_popcount(c ^= a | b) + __builtin_popcount(a & b & c);
  }
};

int main() {
  Solution obj;
  printf("%d\n", obj.minFlips(2, 6, 5)); // expect: 3
  printf("%d\n", obj.minFlips(4, 2, 7)); // expect: 1
  printf("%d\n", obj.minFlips(1, 2, 3)); // expect: 0
}