codeforces 925 c big secret
题意:
给你n个数,b[1],b[2],b[3].......,让你重新排列,使a[i]的值递增
a[i]和b的关系:
a[i] = b[1]^b[2]^b[3]^....^b[i];
首先说异或 因为是递增,所以1^0 0^0 1^1都不满足条件
只有0^1满足条件
1^0 == 1 相当于没有增长
0^1 == 1 这才相当于增长了1
再看 a=00 01 01 10
b=00 10 11 10
这两个二进制数a,b进行异或
对于第一位 大家都等于0 异或出来相当于没变
第二位 大家都等于1 异或出来相当于少1
第三位。。。。。
第四位 a第四位等于0 b第四位等于1 两个数异或 相当于b的这一位没有改变
第五位 a第五位等于1 b第五位等于0 两个数异或 b的这一位变成1
所以只要选择a的最高位等于1 b的这一位等于0的情况进行异或
但是为什么要选择最高位:
因为只要最高位进行了增加 比他低的位无论加1还是减1都不会影响异或后的大小关系
可惜就是这样我也没想出来,想到了0和1的异或关系和一位一位去算
但是没做出来 可惜了
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const long long maxn = 2e5+;
const long long N = (long long)<<;
long long a[maxn];
long long b[maxn];
vector<long long> bit[];
int main()
{
long long n,i,j,k;
long long x;
scanf("%lld",&n);
for(i=;i<n;++i)
{
scanf("%lld",b+i);
x = ;
for(j = ;j>=;--j)
{
if((x<<j)&b[i])
{
bit[j].push_back(b[i]);
break;
}
}
}
x = ;
for(i=;i<n;++i)
{
bool flag = false;
for(j=;j<;++j)
{
if(((x&((long long)<<j)) == ) && bit[j].size())
{
a[i] = bit[j][bit[j].size()-];
x ^= bit[j][bit[j].size()-];
bit[j].pop_back();
flag = true;
break;
}
}
if(!flag)
{
printf("No\n");
return ;
}
}
printf("Yes\n");
for(i=;i<n;++i)
printf("%lld ",a[i]);
}
codeforces 925 c big secret的更多相关文章
- 【CodeForces】925 C.Big Secret 异或
[题目]C.Big Secret [题意]给定数组b,求重排列b数组使其前缀异或和数组a单调递增.\(n \leq 10^5,1 \leq b_i \leq 2^{60}\). [算法]异或 为了拆位 ...
- codeforces div2 603 D. Secret Passwords(并查集)
题目链接:https://codeforces.com/contest/1263/problem/D 题意:有n个小写字符串代表n个密码,加入存在两个密码有共同的字母,那么说这两个密码可以认为是同一个 ...
- CodeForces 496B Secret Combination
Secret Combination Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ...
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined)D. Felicity's Big Secret Revealed
题目连接:http://codeforces.com/contest/757/problem/D D. Felicity's Big Secret Revealed time limit per te ...
- 构造+暴力 Codeforces Round #283 (Div. 2) B. Secret Combination
题目传送门 /* 构造+暴力:按照题目意思,只要10次加1就变回原来的数字,暴力枚举所有数字,string大法好! */ /************************************** ...
- Codeforces Round #603 (Div. 2) D. Secret Passwords 并查集
D. Secret Passwords One unknown hacker wants to get the admin's password of AtForces testing system, ...
- codeforces 496B. Secret Combination 解题报告
题目链接:http://codeforces.com/problemset/problem/496/B 题目意思:给出 n 位数你,有两种操作:1.将每一位数字加一(当某一位 > 9 时只保存个 ...
- Codeforces Round #327 (Div. 1) D. Top Secret Task
D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- Codeforces 590D Top Secret Task
D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
随机推荐
- android使用Pull解析来自服务器的xml文件时出现错误以及解决方案
直接上代码,代码中有详细注释: 1 public class CheckUpdateManager { 2 private static final String TAG = "CheckU ...
- Quartus11中新建工程
最近在使用CycloneII的开发板,但是高版本的Quartus不支持II系列的开发,于是只能用Q11了.好久没玩FPGA了,新建工程的过程中遇到了一些问题,这里把这些问题记下了以便以后查看. Qua ...
- m0n0wall 详细介绍
pfSense就是基于m0n0wall m0n0wall,挺奇怪的软件名, M0n0wall是基于以性能和稳定性著称的FreeBSD内核的嵌入式的防火墙系统. m0n0wall对硬件要求很低,486芯 ...
- “Interrupted by header callback: Server reports Content-Length”如何解决
mock初始化时的错误信息如下: Downloading Packages: [SKIPPED] systemd--.fc25.x86_64.rpm: Already downloaded [SKIP ...
- Linux 终端设备
<Linux终端设备详解> https://www.cnblogs.com/shineshqw/articles/2423989.html
- xml配置sql语句
- Spring PropertyResolver 占位符解析(一)API 介绍
Spring PropertyResolver 占位符解析(一)API 介绍 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html ...
- 论坛:排序 >>case..when..then ..end的妙用
a.主题列表按 最后更新时间 进行排序 数据库SQL语句中没有if..else的判断语句,但是oracle中有decode()函数可以实现这种判断语句,但是还可以用case..when..then . ...
- 找不到类SimpleJdbcTemplate ParameterizedRowMapper cannot be resolved
找不到类SimpleJdbcTemplate 背景 想编译个web应用,原来spring-jdbc.jar用的是Spring 3.1,今天改成用Spring 4.3,报了这个错误. 现象 编译不通过, ...
- Windows-universal-samples学习笔记系列三:Navigation
Navigation Back Button Master/detail Navigation menu (XAML) Pivot Projection XHR, handling navigatio ...