リンク
[ https://codeforces.com/contest/1174/problem/D ]
問題の意味
このような任意のサブセグメントと排他的ではなく、そのアレイを構築またはXとして0ないしましょう、そして各数は1(1 << N)よりも未満であります
分析
ゲームは、これを行うことができない、または唯一のそのレベルを言うことができますあまりにも多くのごみは、十分ではありません。そして、私は質問ビットコンピューティングには本当に敏感ません。
特殊なブラシ下の操作上の問題の後。
私が知っている、この問題に対する公式のソリューションを見ていました。まず、プレフィックスとXOR配列があります。
al⊕al+ 1⋯⊕ar= BL- 1⊕br。、 これで良いの後、我々は最初の接頭辞を逆にしてXOR配列が模索。
サブセグメントの任意の配列Bから得ることができます。、その後、任意の排他的かどうかのサブセクションを作成することは0であり、xものを見るために、発現されず、
その後、任意二十から二bが等しくなることができない、同じである場合については0の特定のサブセクションが存在しなければなりませんXORは、任意のサブセグメント二十、2つのB、次いで、Xであり、排他的論理和Xないない
Bが探し出すので、より深い。これは実際のスキルを学んだ=bi⊕bi-1 AI、だけでなく、XORの性質A。
コード
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4e6;
int s[N];
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n,x;
while(cin>>n>>x){
set<int> se;
int cnt=0;
se.insert(0);
for(int i=1;i<(1<<n);i++){
if(!se.count(i^x)){
s[++cnt]=i;
se.insert(i);
}
}
cout<<cnt<<endl;
for(int i=1;i<=cnt;i++)
cout<<(s[i]^s[i-1])<<' ';
cout<<endl;
}
return 0;
}