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

HDU 5014 Number Sequence(位运算)

时间:2014-09-14 23:28:07      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   art   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014

解题报告:西安网赛的题,当时想到一半,只想到从大的开始匹配,做异或运算得到对应的b[i],但是少了一个操作,ans[i] = temp,却没有想到ans[temp] = i;所以就一直卡在这里了,因为我不确定这样是不是一一对应的,好吧,也没有想到这里,就差这么点了。

bubuko.com,布布扣
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef __int64 LL;
 7 const int maxn = 100005;
 8 int a[maxn],ans[maxn],visit[maxn];
 9 int get(int d)
10 {
11     int num = 0;
12     while(d)
13     {
14         d >>= 1;
15         num++;
16     }
17     return num;
18 }
19 
20 int main()
21 {
22     int n;
23     while(scanf("%d",&n)!=EOF)
24     {
25         for(int i = 0;i <= n;++i)
26         scanf("%d",&a[i]);
27         memset(visit,0,sizeof(visit));
28         memset(ans,0,sizeof(ans));
29         for(int i = n;i > 0;--i)
30         {
31             if(visit[i]) continue;
32             int d = get(i);
33             int temp = ((1 << d) - 1)  ^ i;
34             ans[i] = temp;
35             ans[temp] = i;
36             visit[temp] = visit[i] = 1;
37         }
38         LL sum = 0;
39         for(int i = 0;i <= n;++i)
40         sum += (LL)(i ^ ans[i]);
41         printf("%I64d\n",sum);
42         for(int i = 0;i <= n;++i)
43         printf(i == n? "%d\n":"%d ",ans[a[i]]);
44     }
45     return 0;
46 }
View Code

 

HDU 5014 Number Sequence(位运算)

标签:style   blog   http   color   io   os   ar   for   art   

原文地址:http://www.cnblogs.com/xiaxiaosheng/p/3971820.html

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