2014 网选 5014 Number Sequence(异或)

 1 /*
 2     题意:a, b两个序列,规定由[0, n]区间的数!
 3     求 a[i] ^ b[i] 的和最大!
 4
 5     思路:如果数字 n的二进制有x位, 那么一定存在一个数字m,使得n^m的所有二进制位
 6     都是1,也就是由x位1!这样下去的到的值就是最大值!
 7
 8 */
 9 #include<iostream>
10 #include<cstring>
11 #include<cstdio>
12 #include<algorithm>
13 #define N 100005
14 using namespace std;
15
16 int b[N], vis[N];
17
18
19 int pos[N];
20
21
22 int main(){
23     int n;
24     while(scanf("%d", &n)!=EOF){
25         int x, y;
26         for(int i=0; i<=n; ++i){
27             scanf("%d", &x);
28             pos[x]=i;
29         }
30         memset(vis, 0, sizeof(vis));
31         long long sum=0;
32         for(int i=n; i>=0; --i){
33              y=x=i;
34              if(vis[x]) continue;
35              int tmp=1;
36              while(y){
37                  x^=tmp;
38                  tmp<<=1;
39                  y>>=1;
40             }
41             vis[x]=vis[i]=1;
42             sum+=2*(x^i);
43             b[pos[i]]=x;
44             b[pos[x]]=i;
45         }
46         //printf("%lld\n", sum);
47         cout<<sum<<endl;
48         printf("%d", b[0]);
49         for(int i=1; i<=n; ++i)
50             printf(" %d", b[i]);
51         printf("\n");
52     }
53     return 0;
54 }
时间: 2024-10-10 01:08:52

2014 网选 5014 Number Sequence(异或)的相关文章

HDU 5014 Number Sequence(2014 ACM/ICPC Asia Regional Xi&#39;an Online) 题解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 Number Sequence 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 sequ

HDU 5014 Number Sequence 贪心 2014 ACM/ICPC Asia Regional Xi&#39;an Online

尽可能凑2^x-1 #include <cstdio> #include <cstring> const int N = 100005; int a[N], p[N]; int init(int x) { int cnt = 0; while(x > 1) { x /= 2; cnt ++; } return cnt + 1; } int main() { int n; while(~scanf("%d", &n)){ for(int i = 0;

HDU 5014 Number Sequence ( 构造 )

HDU 5014 Number Sequence ( 构造 ) 题目意思: 给出一个数列 由0 - n 组成 然后需要构造一个数列 (也是由0-n组成),使得 sum(A[i] ^ B[i])的值最大. 分析: 异或不能出现比这个数大的情况,,所以要从大的数往前找. 现计算出当前判断数的二进制位的位数m,然后再与2^m - 1进行异或,这样会保证最大,具体为什么,自己可以想一想 比如: 5 - 101 -- 3位 - 对应 111 101 ^ 111 = 010 代码: #include <cs

hdu 5014 Number Sequence(贪心)

题目链接:hdu 5014 Number Sequence 题目大意:给定n,表示有0~n这n+1个数组成的序列a,要求构造一个序列b,同样是由0~n组成,要求∑ai⊕bi尽量大. 解题思路:贪心构造,对于n来说,找到n对应二进制的取反对应的数x,那么从x~n之间的数即可两两对应,然后x-1即是一个子问题. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; con

HDU 5014 Number Sequence(西安网络赛H题)

HDU 5014 Number Sequence 题目链接 思路:对于0-n,尽量不让二进制中的1互相消掉就是最优的,那么只要两个数只要互补就可以了,这样每次从最大的数字,可以找到和他互补的数字,然后这个区间就能确定了,然后剩下的递归下去为一个子问题去解决 代码: #include <cstdio> #include <cstring> const int N = 100005; int n, a[N], ans[N]; int cnt[N]; int count(int x) {

2014 网选 5024 Wang Xifeng&#39;s Little Plot

题意:从任意一个任意一个可走的点开始找一个最长的路,这条路如果有转弯的话, 那么必须是 90度,或者没有转弯! 思路: 首先用dfs将所有可走点开始的 8 个方向上的线段的最长长度求出来 ! step[i][j][k] 表示的是(i,j)沿着k方向一直走到头或者转弯时的最长步数! 最后枚举每一个可走点转弯为90度的路径,找到最长的长度! step[i][j][k1] + step[i][j][k2] 就是 (i, j)这个点 k1 和 k2方向构成90度! 1 #include<iostream

2014 网选 广州赛区 hdu 5023 A Corrupt Mayor&#39;s Performance Art

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #define N 1000005 6 using namespace std; 7 8 int c[35]; 9 int tree[N*4];//正值表示该节点所管理的区间的颜色是纯色,-1表示的是非纯色 10 int n, m; 11 12 void buildT(int ld, int

ACM学习历程——HDU 5014 Number Sequence (贪心)(2014西安网赛)

Description There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules: ● a i ∈ [0,n] ● a i ≠ a j( i ≠ j ) For sequence a and sequence b, the integrating degree t is defined as follows(“?” denotes exclus

HDU 5014 Number Sequence(异或 进制问题)

题目链接: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 inte