首页 > 其他分享 >D. XOR Construction

D. XOR Construction

时间:2024-03-27 16:22:06浏览次数:23  
标签:XOR int bj 异或 Construction b1 n1 n2

题解

首先根据b1⊕b2=a1,b2⊕b3=a2...bj⊕bj+1=aj

我们不难得出b1​⊕bj+1=a1⊕a2⊕a3....⊕aj

因此我们只需要确定b1的值就能够确定其余所有bi的值,而题目又要求我们的b处于0~n-1范围内,这实际上实在寻找一个 b1​ 使得异或出来的所有值越小越好,所以我们拆位,假设所有数字的第 i 位为 1的个数大于为 0 的个数,那我们最好异或上一个 2^i,这样可以使大部分数字变小。

正确性证明:首先b要求的结果一定是0~n-1,其和是固定的,即n*(n-1)/2,然后我们让所有前缀异或上一个b1,因为前缀异或必然不同(题目说明一定有解),所以每个bi也一定不同,那么我们想竭尽全力让所有数字和最小也只有这么做(贪心)才能实现。

code

 

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int main(){
    int n,ans=0;
    cin>>n;
    for (int i=1;i<n;i++){
        cin>>a[i];
        a[i]^=a[i-1];
    }
    for (int i=20;i>=0;i--){
        int n1=0,n2=0;
        for (int j=n-1;j>=0;j--)
            if (a[j]>>i&1==1) n1++;
            else n2++;
        if (n1>n2) ans|=1<<i;
    }
    cout<<ans;
    for (int i=1;i<n;i++) cout<<" "<<(ans^a[i]);
    return 0;
}

 

标签:XOR,int,bj,异或,Construction,b1,n1,n2
From: https://www.cnblogs.com/purple123/p/18099554

相关文章

  • AtCoder Regular Contest 173 E Rearrange and Adjacent XOR
    洛谷传送门AtCoder传送门不妨考虑最后的结果可以成为哪些\(a_i\)的组合。为了方便分析,我们令\(a_i=2^{i-1}\)。进行一次操作后,所有\(\text{popcount}(a_i)\)都为偶数。所以一个\(x\in[0,2^n-1]\)能被生成出来的必要条件是\(\text{popcount}(x)\)为偶数。然......
  • CF938G-动态连通图最短xor路(线段树分治、并查集、线性基)
    link:https://codeforces.com/contest/938/problem/G[!Description]有一张连通的无向图简单图,三种操作:1、加边\((x,y,d)\)2、删边\((x,y)\)3、询问\(x\toy\)的路径中异或最小的路径(不一定是简单路径)保证每次操作后图是连通的\(1\leqn,m,q\leq2\times10^5\).这......
  • Atcoder ARC165D Xor Sum 5
    考虑到这个最终的答案是\(\oplus\),所以只需要考虑每种排列出现的次数的奇偶,如果为奇再计算贡献即可。考虑什么情况下出现次数为奇。令每个数出现的个数为\(c_{1\simn}\),方案数即为\(\dbinom{k}{c_1,c_2,\cdots,c_n}=\prod_{i=1}^n\dbinom{k-\sum\limits_{j=1}^{......
  • Jailbreaking Large Language Models in Few Queries via Disguise and Reconstructio
    本文是LLM系列文章,针对《MakingThemAskandAnswer:JailbreakingLargeLanguageModelsinFewQueriesviaDisguiseandReconstruction》的翻译。让他们问答:通过伪装和重建在少数查询中打破大型语言模型的牢笼摘要1引言2背景和问题陈述3LLM微调中的安全偏......
  • XOR Break — Solo Version
    题意思路最多两步解决1.一步:只要满足((n^m)<n)即可一步,只要在第一个mi=1的地方n也有1无论如何都可以随便改n得到m2.无解的情况:只要在第一个mi=1的时候n(i)->n(最高位-1)没有1出现肯定无法解决3.二步:类似于10110->0000110110->10101->00001只需......
  • TaxoRec部署与代码阅读
    部署环境Pytorch1.8.1Python3.7.3condacreate-npytorch-taxorecpython=3.7.3pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpletorch==1.8.1pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplegeoopt==0.2.0::根据geoot文档,geoot0.2.0以上版本安......
  • 从数据库中随机选取数据(基于golang,xorm)
    一、 从MySQL数据库中随机选取数据,可以使用SQL的 ORDERBYRAND() 语句来实现。具体步骤如下:定义一个结构体用于存储数据typeUserstruct{Idint64NamestringAgeint}建立与数据库的连接,并获取一个 Engine 实例engine,err:=xorm.NewE......
  • CF1895D XOR Construction 题解
    分析对于异或,有性质\(a\oplusb=c,a\oplusc=b,a\oplusa=0\)。则对于\(a_i\oplusa_{i+1}\),其表示的结果就是\(b_{i}\oplusb_{i+2}\)。做一个前缀异或和,就能够得到\(b_1\)与\(b_2,b_3,\dots,b_n\)的异或结果。考虑枚举\(b_1\),因为在有解的情况下\(b_1\op......
  • [AGC016D] XOR Replace 题解
    题意:一个序列\(a\),一次操作可以将某个位置变成整个序列的异或和。求最少几步到达目标序列\(b\)。\(n\le10^5\)思路:见到这种题,第一步要去尝试把操作转化。稍微推一下可以发现,如果\(\oplus_{i=1}^na_i=s\),则相当于一个\(n+1\)长序列,\(a_{n+1}=s\),每次可以交换\(a......
  • XOR Break — Game Version
    其实做了两道博弈的交互题后可以知道,博弈的交互题一般是需要你找到一种必胜的策略的,而且这种必胜的策略与非交互题还不同,因为对方可能不是按照最优策略走的,所以我们要找的是在任意一种情况下对面怎么走都能胜的条件,而且要对每一种情况都做出对应的策略(非交互题的话,我们是知道对方......