zoukankan      html  css  js  c++  java
  • 【CF1174D】 Ehab and the Expected XOR Problem

    题面

    Given two integers (n) and (x), construct an array that satisfies the following conditions:

    • for any element ai in the array, (1le ai<2^n);
    • there is no non-empty subsegment with bitwise XOR equal to (0) or (x),
    • its length (l) should be maximized.

    A sequence (b) is a subsegment of (a) sequence (a) if (b) can be obtained from (a) by deletion of several (possibly, zero or all) elements from the beginning and several (possibly, zero or all) elements from the end.

    题意

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

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

    思路

    思路比较巧妙,因为元素可重复不太好搞,就考虑构造一个答案序列 (a) 的异或前缀和 (b)

    其中 (b) 满足任意 (b_i xor b_j ot= x)(0)

    (1) 枚举到 (2^n-1) ,每次用可行的 (i) 数加入答案并排除 (i xor x) 这个数。

    /************************************************
    *Author        :  lrj124
    *Created Time  :  2019.10.15.19:28
    *Mail          :  1584634848@qq.com
    *Problem       :  cf1174d
    ************************************************/
    #include <cstdio>
    const int maxn = 1<<18;
    int n,x,ans[maxn];
    bool vis[maxn];
    int main() {
    	//freopen("cf1174d.in","r",stdin);
    	//freopen("cf1174d.out","w",stdout);
    	scanf("%d%d",&n,&x);
    	vis[0] = vis[x] = true;
    	for (int i = 1;i < 1<<n;i++)
    		if (!vis[i]) {
    			vis[i^x] = true;
    			ans[++ans[0]] = i;
    		}
    	printf("%d
    ",ans[0]);
    	for (int i = 1;i <= ans[0];i++) printf("%d ",ans[i]^(i ^ 1 ? ans[i-1] : 0));
    	return 0;
    }
    
  • 相关阅读:
    在Linux下删除文件及文件夹(rm)
    修改Linux文件权限
    文件分页显示(ls -al |more)
    linux的文件权限
    Linux中的重启(reboot)
    linux关机前同步数据(sync)
    hdu4990 Reading comprehension 矩阵快速幂
    hdu4965 Fast Matrix Calculation 矩阵快速幂
    hdu4847 Wow! Such Doge! KMP
    hdu4705 Y 树形DP
  • 原文地址:https://www.cnblogs.com/lrj124/p/11679998.html
Copyright © 2011-2022 走看看