Description

题库链接

给出 \(n\) 个数,让你生成这 \(n\) 个数的一个排列 \(A\) 。定义 \(B_i = \bigoplus\limits_{j=1}^i A_j\) , \(\oplus\) 表示按位异或,使得 \(B\) 单调递增。

\(1\leq n\leq 10^5,1\leq A_i<2^{60}\)

Solution

一个显然的性质是对于一个数 \(p\) ,找到一个数 \(q\) 使得 \(p\oplus q>p\) 首先要满足 \(q\) 的最高位在 \(p\) 中为 \(0\) 。

由这个性质,我们考虑一种贪心:就是对于当前的数找到一个最高位最小的数的最高位在当前的数中为 \(0\) 。作为排列的下一位。

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 100000+5; int n; ll bin[65], a, ans[N];
queue<ll>q[65]; void work() {
scanf("%d", &n);
bin[0] = 1; for (int i = 1; i <= 60; i++) bin[i] = bin[i-1]<<1;
for (int i = 1; i <= n; i++) {
scanf("%I64d", &a);
for (int j = 60; j >= 0; j--)
if (bin[j]&a) {q[j].push(a); break; }
}
ll now = 0;
for (int i = 1, flag = 0; i <= n; i++, flag = 0) {
for (int j = 0; j <= 60; j++)
if (!(now&bin[j])) {
if (q[j].empty()) continue;
now ^= (ans[i] = q[j].front()); q[j].pop(); flag = 1; break;
}
if (flag == 0) {puts("No"); return; }
}
puts("Yes");
for (int i = 1; i <= n; i++) printf("%I64d ", ans[i]);
}
int main() {work(); return 0; }

[Codeforces 925C]Big Secret的更多相关文章

  1. Codeforces 590D Top Secret Task

    D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  2. codeforces 966c//Big Secret// Codeforces Round #477 (Div. 1)

    题意:一个数组,重新打乱后前缀异或和递增.问这样的排列. 将所有元素按照二进制最高位分组.每次选当前前缀和sum的二进制最低的0位,再从分组中挑一个作为答案.先放首1在较低位的再放首1在较高位的总是可 ...

  3. 2018省赛赛第一次训练题解和ac代码

    第一次就去拉了点思维很神奇的CF题目 2018省赛赛第一次训练 # Origin Title     A CodeForces 607A Chain Reaction     B CodeForces ...

  4. CodeForces 496B Secret Combination

    Secret Combination Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u ...

  5. 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 ...

  6. 构造+暴力 Codeforces Round #283 (Div. 2) B. Secret Combination

    题目传送门 /* 构造+暴力:按照题目意思,只要10次加1就变回原来的数字,暴力枚举所有数字,string大法好! */ /************************************** ...

  7. 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, ...

  8. codeforces 496B. Secret Combination 解题报告

    题目链接:http://codeforces.com/problemset/problem/496/B 题目意思:给出 n 位数你,有两种操作:1.将每一位数字加一(当某一位 > 9 时只保存个 ...

  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 ...

随机推荐

  1. 利用backtrace和backtrace_symbols函数打印调用栈信息

    在头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈. #include <execinfo.h>  int backtrace(void * ...

  2. Java异常处理机制的秘密

    一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw 2.finally中t ...

  3. BitAdminCore框架应用篇:(四)核心套件querySuite按钮功能

    索引 NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/coo ...

  4. docker 网络实践

    #docker 网络模式 环境 centos7. , Docker version -ce docker自带网络类型 bridge,host,none,container,overlay,macvla ...

  5. jzoj100044

    完全背包問題 我們可以將數組內每個元素看成一個物品,這樣問題就轉化成: 現有n個物品,每個物品可以取a[i]~b[i]個,價值為d[i],費用為c[i],問怎麼樣取讓費用為0且價值最大 我們可以先每種 ...

  6. IntelliJ IDEA优秀插件(编程通用)

    一.IntelliJ IDEA开发 最近大部分开发IDE工具都切换到了,所以也花了点心思去找了相关的插件.这里整理的适合各种语言开发的通用插件,也排除掉IntelliJ IDEA自带的常用插件了(有些 ...

  7. ReentrantReadWriteLock源码分析(一)

    此处源码分析,主要是基于读锁,非公平机制,JDK1.8. 问题: 1.ReentrantReadWriteLock是如何创建读锁与写锁? 2.读锁与写锁的区别是什么? 3.锁的重入次数与获取锁的线程数 ...

  8. 彻底弄懂css3的flex弹性盒模型

    由于在日常工作中使用css或者bootstrap的栅格系统已经能很好的满足业务需求,所以一直以来对css3的弹性布局不是很感冒. 近日有幸在一篇文章中领略了flex的魅力--简洁优雅.随试之. /*容 ...

  9. klee 测试一个简单的正则表达式匹配函数

    函数源代码位于 klee源码 的examples/regexp文件夹下面:c程雪源码文件名为  Regexp.c First Step: 使用clang编译器将c源代码转化为llvm位码形式.如果你的 ...

  10. Numpy学习50例

    基础部分 1.导入numpy模块 import numpy as np 2.查看numpy版本信息 print(np.__version__) numpy的主要对象的多维数组Ndarray.Numpy ...