首页 > 其他 > 详细

[CF1174D] Ehab and the Expected XOR Problem - 构造

时间:2020-05-04 15:36:10      阅读:48      评论:0      收藏:0      [点我收藏+]

Description

给两个数 $ n $ 和 $ x $,构造一个满足以下条件的序列:

  • 对任何序列中的元素 $ a_i \(,\) 1\le a_i<2^n $
  • 序列中没有非空连续子序列异或和为 $ 0 $ 或 $ x $
  • 序列长度 $ l $ 应该最大

Solution

构造前缀和序列 \(s_i = \oplus_{j=1}^i a_i\),每次暴力找一个 \([1,2^n)\) 的数,使得 \(s_i\) 没有出现过即可

#include <bits/stdc++.h>
using namespace std;

const int N = 1000005;

int n,x,b[N],a[N],top;

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>x;
    top=1;
    b[0]=b[x]=1;
    while(true) {
        for(int i=1;i<1<<n;i++) {
            if(b[a[top-1]^i]==0) {
                a[top]=a[top-1]^i;
                b[a[top]]=1;
                b[a[top]^x]=1;
                break;
            }
        }
        if(a[top]) ++top;
        else break;
    }
    cout<<top-1<<endl;
    for(int i=1;i<=top-1;i++) cout<<(a[i]^a[i-1])<<" ";
}

[CF1174D] Ehab and the Expected XOR Problem - 构造

原文:https://www.cnblogs.com/mollnn/p/12826588.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!