2014西安网络赛1008||hdu5014 二进制
来源:互联网 发布:淘宝假冒伪劣被处罚 编辑:程序博客网 时间:2024/05/16 16:12
http://acm.hdu.edu.cn/showproblem.php?pid=5014
Problem Description
There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules:
● ai ∈ [0,n]
● ai ≠ aj( i ≠ j )
For sequence a and sequence b, the integrating degree t is defined as follows(“⊕” denotes exclusive or):
t = (a0 ⊕ b0) + (a1 ⊕ b1) +···+ (an ⊕ bn)
(sequence B should also satisfy the rules described above)
Now give you a number n and the sequence a. You should calculate the maximum integrating degree t and print the sequence b.
● ai ∈ [0,n]
● ai ≠ aj( i ≠ j )
For sequence a and sequence b, the integrating degree t is defined as follows(“⊕” denotes exclusive or):
(sequence B should also satisfy the rules described above)
Now give you a number n and the sequence a. You should calculate the maximum integrating degree t and print the sequence b.
Input
There are multiple test cases. Please process till EOF.
For each case, the first line contains an integer n(1 ≤ n ≤ 105), The second line contains a0,a1,a2,...,an.
For each case, the first line contains an integer n(1 ≤ n ≤ 105), The second line contains a0,a1,a2,...,an.
Output
For each case, output two lines.The first line contains the maximum integrating degree t. The second line contains n+1 integers b0,b1,b2,...,bn. There is exactly one space between bi and bi+1(0 ≤ i ≤ n - 1). Don’t ouput any spaces after bn.
Sample Input
42 0 1 4 3
Sample Output
201 0 2 3 4
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;typedef __int64 LL;const int N=100055;int a[N],b[N],vis[N];int n;int get(int x){ int num=0; while(x) { x>>=1; num++; } return num;}int main(){ while(~scanf("%d",&n)) { for(int i=0;i<=n;i++) scanf("%d",&a[i]); memset(vis,-1,sizeof(vis)); for(int i=n;i>=0;i--) { if(vis[i]!=-1) continue; int x=get(i); int tmp=((1<<x)-1)^i; b[i]=tmp; b[tmp]=i; //printf("%d\n",b[i]); vis[tmp]=1; vis[i]=1; } LL sum=0; for(int i=0;i<=n;i++) sum+=(LL)(i^b[i]); printf("%I64d\n",sum); for(int i=0;i<=n;i++) printf(i!=n?"%d ":"%d\n",b[a[i]]); } return 0;}
0 0
- 2014西安网络赛1008||hdu5014 二进制
- HDU5014 2014ACM-ICPC 亚洲区域赛西安赛区网络赛H题 Number Sequence
- [2014 西安网络赛]
- 2014网络赛 西安赛区
- 2014西安赛区网络赛
- 2014 西安赛区网络赛 5012Dice
- hdu 5012 2014西安网络赛
- 2014西安网络赛1009||hdu5015 矩阵
- 2014西安网络赛1006||hdu5012 bfs
- 西安赛区网络赛
- 西安网络赛 经验总结
- 西安网络赛 xor
- HDU5014 Number Sequence(二进制,位运算)
- 西安网络赛e题
- 2017西安网络赛C_SUM
- 2017西安网络赛B_Coin
- hdu 5014 Number Sequence(西安网络赛1008)
- 后缀数组(2014西安网络赛)hdu5008
- xib中使用Scrollview无法滑动情况
- 用pexpect实现的任务分发工具,可用于pexpect学习
- svn:error use xcode-select to change
- 【遇见Android bug】requestFeature() must be called before adding content
- SVN删除文件及其恢复
- 2014西安网络赛1008||hdu5014 二进制
- Mockito学习1
- 个推针对android同一包名不同管理台应用的解决方案
- 模拟退火算法(未完善)
- 杭电2588 GCD(欧拉函数+gcd的应用)
- iPhone开发网站汇总
- 关于c++容器
- "><img src=hi onerror=alert(/we8/)>
- hdu2222 Keywords Search