POJ 2443(二進位制壓縮 bitset)

2022-05-24 15:39:08 字數 2066 閱讀 1625

2015-01-18 15:48:24

思路:用1000*10000的01矩陣來表示數是否存在。

直接用陣列顯然存不下,那麼考慮用30+個int型數去存每一列,以其二進位制位來表示0、1,31*33 > 1000,最多用33個整數即可,將時間和空間複雜度將為33 * 10000。

用bitset實現:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include 11 #include

12 #include 13 #include 14

using

namespace

std;

1516

#define mem(a,b) memset(a,b,sizeof(a))

17#define rep(i,n) for(int i=1;i<=(n);++i)

18#define rev(i,n) for(int i=(n);i>=1;--i)

19#define for(i,a,b) for(int i=(a);i<=(b);++i)

20#define rfor(i,a,b) for(int i=(a);i>=(b);--i)

21#define mp(a,b) make_pair(a,b)

2223 typedef long

long

ll;24 typedef pairpii;

25const

int inf = (1

<< 30) - 1;26

const

int maxn = 10010;27

28int

n,q;

29 bitset<1010>b[maxn],judge;

3031

intmain()41}

42 scanf("

%d",&q);

43rep(i,q)49}

50return0;

51}52

view code

用int二進位制壓縮:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include

11 #include 12 #include 13

using

namespace

std;

1415

#define mem(a,b) memset(a,b,sizeof(a))

16#define rep(i,n) for(int i=1;i<=(n);++i)

17#define rev(i,n) for(int i=(n);i>=1;--i)

18#define for(i,a,b) for(int i=(a);i<=(b);++i)

19#define rfor(i,a,b) for(int i=(a);i>=(b);--i)

20#define mp(a,b) make_pair(a,b)

2122 typedef long

long

ll;23 typedef pairpii;

24const

int inf = (1

<< 30) - 1;25

const

int maxn = 10010;26

27int

n,q;

28int g[maxn][40

];29

30int

main()43}

44 scanf("

%d",&q);

45rep(i,q)

52if(flag) printf("

yes\n");

53else printf("

no\n");

54}55}

56return0;

57}58

二進位制壓縮 演算法

二進位制壓縮 在程式設計時遇到每個資料只有兩種狀態,且 dfs 或者 bfs 時遍歷時間複雜度高時,可以採用二進位制壓縮資料,尤其是二維陣列。1.二進位制壓縮乙個二位陣列 例如 正常儲存資料回使用二位陣列,1,0,即 0100 0000 0000 0100如果我們採用二進位制壓縮為乙個 int 型別...

二進位制狀態壓縮

二進位制狀態壓縮,即將乙個長度為m的bool陣列用乙個m位的二進位制數來表示和儲存 操作運算 取出整數n在二進位制表示下的第k位 n k 1 取出整數n在二進位制表示下的第0 k 1位 後 k 位 n 1 取出整數n在二進位制表示下的第k位取反 n xor 1 取出整數n在二進位制表示下的第k位賦值...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...