码迷,mamicode.com
首页 > 其他好文 > 详细

2014 网选 5014 Number Sequence(异或)

时间:2014-09-15 22:43:39      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   for   2014   div   sp   

 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(异或)

标签:style   blog   color   io   os   for   2014   div   sp   

原文地址:http://www.cnblogs.com/hujunzheng/p/3973850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!