原题是CF上的某题,但是还要输出方案。。。。好鬼畜啊WWW

发现答案肯定是优先 xorsum^x1 + x1 最大,然后再优先x1最小(也就是 xorsum^x1 最大)。

我们把xorsum二进制分解一下,如果要让 xorsum^x1 + x1最大,那么肯定先得是 xorsum 为0的位 x1 在这一位是1再好不过了,并且是贪心的从高位到低位。。。

同样的,xorsum为1的位 xorsum^x1 在这里为1也再好不过了,同样是贪心的从高位到低位。。。。

这种贪心的思想实际上就已经把 二进制的每一位给排了一下优先级,先是 xorsum 为0的位 优先级要高于 xorsum 为1的位,然后再是高位优先于低位。。。。

然后这种任意子集的异或肯定是线性基没错啦。。。只不过传统的线性基是优先级只有高位到低位;所以这个题也得按照特殊的优先级插入。。。然后再按照特殊的优先级贪心就行了。。。。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=67;
ll ci[maxn],a[maxn],n;
ll Xor,now,num[100005];inline void ins(ll x){for(int i=60;i>=0;i--)  if(!(Xor&ci[i])) if(x&ci[i]){if(!a[i]){ a[i]=x; return;}x^=a[i];}for(int i=60;i>=0;i--)  if(Xor&ci[i]) if(x&ci[i]){if(!a[i]){ a[i]=x; return;}x^=a[i];}
}inline ll read(){ll x=0; char ch=getchar();for(;!isdigit(ch);ch=getchar());for(;isdigit(ch);ch=getchar()) x=x*10ll+ch-'0';return x;
}inline void solve(){   now=0;for(int i=60;i>=0;i--) if(!(Xor&ci[i])&&!(now&ci[i])) now^=a[i];for(int i=60;i>=0;i--) if((Xor&ci[i])&&!(now&ci[i])) now^=a[i];
}int main(){
//  freopen("data.in","r",stdin);
//  freopen("data.out","w",stdout);ci[0]=1;for(int i=1;i<=60;i++) ci[i]=ci[i-1]+ci[i-1];scanf("%d",&n);for(int i=1;i<=n;i++) num[i]=read(),Xor^=num[i];for(int i=1;i<=n;i++) ins(num[i]);solve();printf("%lld\n",Xor^now);return 0;
}

转载于:https://www.cnblogs.com/JYYHH/p/9102426.html

Loj #6060. 「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set相关推荐

  1. Loj #6077. 「2017 山东一轮集训 Day7」逆序对

    Loj #6077. 「2017 山东一轮集训 Day7」逆序对 Solution 令fi,jf_{i,j}fi,j​表示前iii个数产生jjj个逆序对的方案数,每次考虑把i+1i+1i+1加入,有i ...

  2. LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告

    LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告 好苹果会组成连通块,整棵树的权值为 ∑ i = 1 n c i [ c i ≥ 0 ] [ s i z n u m ( c i ...

  3. LOJ#6074. 「2017 山东一轮集训 Day6」子序列

    LOJ#6074. 「2017 山东一轮集训 Day6」子序列 先考虑全局询问怎么做,设 f ( i , c ) f(i,c) f(i,c) 表示在 S 1 ⋯ i S_{1\cdots i} S1⋯ ...

  4. LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告

    LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告 前置知识:闭区间上的连续函数的零点存在性定理: 我们定义这样的函数: 定义域为 [ l , r ] ∩ Z [l,r]\cap ...

  5. [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]

    题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 ...

  6. loj#6100. 「2017 山东二轮集训 Day1」第一题 主席树+二分

    题目描述: 小火车沉迷垃圾手游不能自拔,正在玩碧蓝航线,可惜小火车的舰(lao)队(po)练度太低打不过副本,所以他只好去刷其余的副本来升级. 总共有 n 个副本编号从 1 到 n ,每个副本有个难度 ...

  7. loj #6070. 「2017 山东一轮集训 Day4」基因

    回文自动机好题啊! 解法一 每$\sqrt n \(分一块 每块建回文自动机到字符串末尾. 顺便开三个\)\sqrt n * n\(的数组记下预处理答案,回文自动机头指针,和每个节点第一次出现的右端点 ...

  8. #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)

    #6073. 「2017 山东一轮集训 Day5」距离 给定一颗有nnn个节点带边权的树,以及一个排列ppp,path(u,v)path(u, v)path(u,v)为u,vu, vu,v路径上的点集 ...

  9. 容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对

    文章目录 Co-prime source solution code Character Encoding source solution code Tree and Constraints sour ...

最新文章

  1. windows下卸载oracle11g
  2. Jenkins 部署
  3. docker 之volume
  4. 组合数据类型练习、英语词频统计
  5. 移动端小程序 腾讯地图sdk 当前位置 地址你解析 距离计算
  6. 计算机数据库管理基本知识,2015年计算机四级考试《数据库技术》基础知识:概念篇...
  7. SpringBoot集成MyBatis-Plus分页插件
  8. java远程关机代码_使用shutdown命令实现局域网内远程关机、重启整蛊他人
  9. 《致加西亚的信》读后感
  10. 学员管理系统(面向对象版)
  11. 分门别类刷leetcode——链表 1
  12. vue打包导致浏览器崩溃的解决方法
  13. 基于瞬时功率理论的APF的SIMULINK模型
  14. Databricks 第1篇:初识Databricks,创建工作区、集群和Notebook
  15. NLP-生成模型-2016-生成式摘要模型:Seq2Seq+Attention+Copy【Pointer网络的Copy机制解决Decoder端的OOV问题】【抽取式+生成式】【第一个生成式摘要模型】
  16. 图数据结构之邻接矩阵Adjacency Matrix(Python版)
  17. [转]联想Y450笔记本Gentoo下配置无线网卡问题
  18. PSP 视频缩略图 一点就生成 -- PSP Falcon
  19. telink蓝牙芯片 串口问题
  20. vue 数字转为中文大写的代码

热门文章

  1. 链表合并面试100题系列之18链表合并
  2. [linux 日常]修改ls目录的颜色
  3. 联邦知识蒸馏概述与思考(续)
  4. 北上深 | 商汤招聘智能视频和数字人算法研究员(全职/实习)
  5. 推荐一个开源文本识别工具箱,实现 5 种实用经典算法
  6. 黑科技DeepFake检测方法:利用心跳做信号,还能「揪出」造假模型
  7. 资深程序员:Python中你不知道的那些小工具
  8. 如何成为一名出色的次世代游戏美术师?
  9. 使用spyder编译器单步调试python
  10. java 事务管理 子父线程_Java中的父线程与子线程