首页 > 代码库 > 2014 网选 5014 Number Sequence(异或)
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 }
2014 网选 5014 Number Sequence(异或)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。