あなたGegeguosheng
高度なアルゴリズムコンテストガイドノート
P2114 [NOI2014]窮迫症候群を立ち上げ
- ビットセット
- バイナリ状態の圧縮LYDのP8
#include<bits/stdc++.h>
using namespace std;
bitset<30>a,b((1<<30)-1),c;
int n,m,r;
char s[5];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s%d",s,&r);
if(s[0]=='A')a&=r,b&=r;
if(s[0]=='O')a|=r,b|=r;
if(s[0]=='X')a^=r,b^=r;
}
for(int i=0;i<30;++i){
if(a[i]|(b[i] && c.to_ulong()<m))
c[i]=1;
}
printf("%d",c.to_ulong());
}
ビットセット
進数を格納するためのビットセット。ブール同じようなタイプのアレイ、ビットセットの各要素は、二つの値0又は1を有しています。
しかし、要素--bitsetスペースの最適化があり、一般的に1ビットのみです。
ビットセットの各要素は、個々に、例えば、次のコードにアクセスすることができます。
出力フォーマット
printf( "%Dを\ n"、x.to_ulong())。
coutの<< X <<てendl;
ビット集合<15>、B(文字列( "101")); //定義するビットセットは、15 15をすることを意味します
[10] = 1; //は、第10 1のように定義されます
出力します。
出力B;
a=101; //赋值a
出力します。
出力:
1024
000010000000000
5
000000000000101
101
000000001100101
図から分かるように、[10] 1つの+ 2 ^ 10の=対応します。
ここでは、神秘的なビットセット直接出力されます。
さらに、文字列はビットセットに直接行くことができます。
興味深いことに、ビットセットを直接割り当てることができます!
もちろん、ビットセット<15>を割り当てるために、C(101)です!
それから
ビット集合<4>(文字列( "1001"));
ビット集合<4> B(文字列( "0011"));
COUT <<(A 2 = B)<< ENDL。// 1010
COUT <<(A&= B)<< ENDL。// 0010
coutの<<(| = B)<<てendl; // 0011
coutの<<てendl << <<てendl; // 0011
coutの<< B <<てendl <<てendl; // 0011
COUT <<(<< = 2)<< ENDL。// 1100
coutの<<(>> = 1)<<てendl; // 0110
coutの<<(〜B)<<てendl; // 1100
COUT <<(B << 1)<< ENDL。// 0110
COUT <<(B >> 1)<< ENDL。// 0001
COUT <<(== b)は<< ENDL。//偽(0110 == 0011)
coutの<<(= B!)<<てendl; //真(0110!= 0011)
COUT <<(A&B)<< ENDL。// 0010
coutの<<(| B)<<てendl; // 0111
coutの<<(A ^ B)<<てendl; // 0101
これらを読んだ後、それはあなたがすでにビットセットの深い理解を持っていると推定され、それは磁器ビットコンピューティングを所有していました!
それから
ビットセットと呼ばれるもののために:
)a.size(サイズ(ビット数)を返し
a.count()番号1を返し、
a.anyは、()があるかどうかを返します。
a.none()かどうかを1返します。
a.set()すべてが1になって
a.set(p)はp + 1つのビットが1になるの
a.set(P、x)は第一のp + 1つのビットはXとなります
a.reset()すべてが0になって
a.reset(p)はp + 1つのビットが0になるの
a.flip()はすべて無効化されます
a.flip(P)P + 1の第1のビット反転
エラーが範囲外の場合a.to_ulong()は、符号なしlongにその結果を返します
a.to_ullong()はエラーが範囲外の場合、結果に変換される長いunsigned long型を返します
文字列を変換した結果を返すa.to_string()
どのようにされない8つのデジタルプレースホルダ「0」には、それに読み込ま?
int ok=0,x;
rep(i,1,n*n){
rd(x);
if(x==0)ok=1;
else a[i-ok]=x;
}