Loj #6060. 「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set
原题是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相关推荐
- Loj #6077. 「2017 山东一轮集训 Day7」逆序对
Loj #6077. 「2017 山东一轮集训 Day7」逆序对 Solution 令fi,jf_{i,j}fi,j表示前iii个数产生jjj个逆序对的方案数,每次考虑把i+1i+1i+1加入,有i ...
- LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告
LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告 好苹果会组成连通块,整棵树的权值为 ∑ i = 1 n c i [ c i ≥ 0 ] [ s i z n u m ( c i ...
- 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⋯ ...
- LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告
LOJ#6103. 「2017 山东二轮集训 Day2」第一题 解题报告 前置知识:闭区间上的连续函数的零点存在性定理: 我们定义这样的函数: 定义域为 [ l , r ] ∩ Z [l,r]\cap ...
- [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]
题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 ...
- loj#6100. 「2017 山东二轮集训 Day1」第一题 主席树+二分
题目描述: 小火车沉迷垃圾手游不能自拔,正在玩碧蓝航线,可惜小火车的舰(lao)队(po)练度太低打不过副本,所以他只好去刷其余的副本来升级. 总共有 n 个副本编号从 1 到 n ,每个副本有个难度 ...
- loj #6070. 「2017 山东一轮集训 Day4」基因
回文自动机好题啊! 解法一 每$\sqrt n \(分一块 每块建回文自动机到字符串末尾. 顺便开三个\)\sqrt n * n\(的数组记下预处理答案,回文自动机头指针,和每个节点第一次出现的右端点 ...
- #6073. 「2017 山东一轮集训 Day5」距离(树链剖分 + 永久标记主席树)
#6073. 「2017 山东一轮集训 Day5」距离 给定一颗有nnn个节点带边权的树,以及一个排列ppp,path(u,v)path(u, v)path(u,v)为u,vu, vu,v路径上的点集 ...
- 容斥问卷调查反馈——Co-prime,Character Encoding,Tree and Constraints,「2017 山东一轮集训 Day7」逆序对
文章目录 Co-prime source solution code Character Encoding source solution code Tree and Constraints sour ...
最新文章
- windows下卸载oracle11g
- Jenkins 部署
- docker 之volume
- 组合数据类型练习、英语词频统计
- 移动端小程序 腾讯地图sdk 当前位置 地址你解析 距离计算
- 计算机数据库管理基本知识,2015年计算机四级考试《数据库技术》基础知识:概念篇...
- SpringBoot集成MyBatis-Plus分页插件
- java远程关机代码_使用shutdown命令实现局域网内远程关机、重启整蛊他人
- 《致加西亚的信》读后感
- 学员管理系统(面向对象版)
- 分门别类刷leetcode——链表 1
- vue打包导致浏览器崩溃的解决方法
- 基于瞬时功率理论的APF的SIMULINK模型
- Databricks 第1篇:初识Databricks,创建工作区、集群和Notebook
- NLP-生成模型-2016-生成式摘要模型:Seq2Seq+Attention+Copy【Pointer网络的Copy机制解决Decoder端的OOV问题】【抽取式+生成式】【第一个生成式摘要模型】
- 图数据结构之邻接矩阵Adjacency Matrix(Python版)
- [转]联想Y450笔记本Gentoo下配置无线网卡问题
- PSP 视频缩略图 一点就生成 -- PSP Falcon
- telink蓝牙芯片 串口问题
- vue 数字转为中文大写的代码