bitset大概就是類似於bool陣列一樣的東西
但是它的每個位置只佔1bit(特別特別小)
bitset的原理大概是將很多數壓成乙個,從而節省空間和時間(暴力出奇蹟)
一般來說bitset會讓你的演算法複雜度 $/32$(具體是什麼要看計算機)
使用bitset型別需$#include$
bitset型別在定義時就需要指定所佔的空間,例如
bitset<233>bit;
bitset型別可以用string和整數初始化(整數轉化成對應的二進位制)
#include#include#include
using
namespace
std;
intmain()
輸出結果
0000000000000001110100100000000000000011101001
bitset支援所有位運算
bitset<23>bita(string("11101001
"));
bitset
<23>bitb(string("
11101000
"));
cout
<<(bita^bitb)/輸出00000000000000000000001
bitset<23>bita(string("11101001
"));
bitset
<23>bitb(string("
11101000
"));
cout
<<(bita|bitb)/輸出00000000000000011101001
bitset<23>bita(string("11101001
"));
bitset
<23>bitb(string("
11101000
"));
cout
<<(bita&bitb)/輸出00000000000000011101000
bitset<23>bit(string("11101001
"));
cout
<<(bit<<5)/輸出00000000001110100100000
bitset<23>bit(string("11101001
"));
cout
<<(bit>>5)/輸出00000000000000000000111
對於乙個叫做bit的bitset:bit.size() 返回大小(位數)
bit.count() 返回1的個數
bit.any() 返回是否有1
bit.none() 返回是否沒有1
bit.
set() 全都變成1
bit.
set(p) 將第p +1位變成1(bitset是從第0位開始的!)
bit.
set(p, x) 將第p +1位變成x
bit.reset() 全都變成0
bit.reset(p) 將第p +1位變成0
bit.flip() 全都取反
bit.flip(p) 將第p +1位取反
bit.to_ulong() 返回它轉換為unsigned long的結果,如果超出範圍則報錯
bit.to_ullong() 返回它轉換為unsigned
long
long的結果,如果超出範圍則報錯
bit.to_string() 返回它轉換為string的結果
這玩意兒其實挺實用的,
一般用來優化奇偶性有關的問題,或者判斷聯通性之類的,(或許還可以在搜尋的時候優化一下訪問標記?)
bzoj3687
bzoj4484
快省選了,可以自己還是什麼都不會,估計這兩天學新演算法也沒啥意義了,就整理整理語法吧qwq..
bitset用法小結
b.any b中是否存在置為1的二進位制位?b.none b中不存在置為1的二進位制位嗎?b.count b中置為1的二進位制位的個數 b.size b中二進位制位的個數 b pos 訪問b中在pos處的二進位制位 b.test pos b中在pos處的二進位制位是否為1?b.set 把b中所有二進...
bitset 用法整理
建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5 b0 5 則 b0 為 00101 bitsetb s...
bitset用法整理
bitset用法整理 2008 01 17 14 15 建構函式 bitsetb b有n位,每位都為0.引數n可以為乙個表示式.如bitset 5 b0 則 b0 為 00000 bitsetb unsigned long u b有n位,並用u賦值 如果u超過n位,則頂端被截除 如 bitset 5...