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 #includeview code8 #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
用int二進位制壓縮:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include8 #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年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...