Bitmask
Eryawan P
Bitmask??
Simply, work on bit-level
Solving problem by manipulating bit
Why?
● Banyak dikombinasikan dengan teknik lain ( DP, Segment Tree, Adhoc )
● Bruteforce garis keras kebanyakan memakai bitmask (N<=16)
● Mempersingkat code
● Memperkeren code
Operasi pada bit (Bitwise)
1. Shift Right (a >> x )
Semua bit representasi a digeser ke kanan sebanyak x kali, bit kanan dihapus dan bit kiri
diisi 0
Sama aja membagi dengan 2^x
floor(a/2) ⇐⇒ a >> 1
floor(a/(2^x)) ⇐⇒ a >> x
2. Shift Left ( a << x )
Semua bit representasi a digeser ke kiri sebanyak x kali, bit kiri dihapus dan bit kanan diisi
0
Sama aja mengali dengan 2^x
a*2 ⇐⇒ x << 1
a*(2^x) ⇐⇒ a << x
3. OR ( a | b )
● Untuk mengaktifkan bit pada sebuah posisi
4. AND ( a & b )
● Untuk mengecek apakah bit pada sebuah posisi hidup
5. XOR ( a ^ b )
● Untuk mematikan bit pada sebuah posisi
Teknik teknik
__builtin_popcount
Menghitung banyaknya bit yang nyala
Builtin function g++
Harus pake compiler g++
Hardware optimization, makanya lebih cepet dari implemen sendiri
XOR Properties
A^B=C
A^C=B
A1^A2^...^AN =K
K^A2^A3^...^AN = A1
A1^A3^...^AN ^K = A2
Another properties
a+b = (a xor b) + (a and b)*2
Problems
● Traveling Salesman Problem (Graph + Shortest path + DP)
● [Link] ( DP )
● [Link]
● [Link]
Ty ty