首页 > 代码库 > HDU 5014 Number Sequence(位运算)
HDU 5014 Number Sequence(位运算)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014
解题报告:西安网赛的题,当时想到一半,只想到从大的开始匹配,做异或运算得到对应的b[i],但是少了一个操作,ans[i] = temp,却没有想到ans[temp] = i;所以就一直卡在这里了,因为我不确定这样是不是一一对应的,好吧,也没有想到这里,就差这么点了。
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 }
HDU 5014 Number Sequence(位运算)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。