大致题意
给出一列n个数a[n],每个数属于0--n,切每个数字只出现一次
求出一个符合上面条件的b[n]使得a[i]^b[i]的和最大
大致思路
找出规律就很简单
比如a[i]=6 也就是 110 那就让b[i]为001与其配对
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; int vis[100005]; __int64 num[100005],opt[100005]; __int64 cal(__int64 a){ __int64 res=0,b,i=0; while(a){ b=a^1; b=b%2; res+=b<<i; a/=2; i++; } return res; } int main(){ __int64 n,i,a,ans; while(scanf("%I64d",&n)!=EOF){ ans=0; for(i=0;i<=n;i++){ scanf("%I64d",&num[i]); } memset(vis,0,sizeof(vis)); for(i=n;i>=0;i--){ if(!vis[i]){ a=cal(i); if(!vis[a]){ ans+=2*(i^a); opt[i]=a; opt[a]=i; vis[i]=vis[a]=1; } } } printf("%I64d\n",ans); for(i=0;i<n;i++){ printf("%I64d ",opt[num[i]]); } printf("%I64d\n",opt[num[n]]); } return 0; }
相关推荐
HDOJ题目分类HDOJ题目分类HDOJ题目分类
ACM ICPC HDOJ1002
ACM ICPC HDOJ1001
hdoj1001标程
hdoj上的资源,代码有注释,很不错的哦
hdoj1004,解题代码,答案代码,欢迎下载
ACM ICPC HDOJ1003
ACM ICPC HDOJ1008
杭州电子科技大学hdoj1002,大整数相加问题
杭州电子科大HDOJ
c语言 最短路 是hdoj上的一个最短路问题,写的很牛
ACM ICPC HDOJ1000
hdoj解题代码,题目为1000-1050
一些HDOJ上的DP题目的小总结,但愿能帮到那些想专攻DP的人吧
codj,hdoj的源码(50-60题)
hdoj 2013 多校训练3标程+解题报告
HDOJ 源代码 包含几百道HDOJ题目源码
hdoj1005 Number Sequence, 杭州电子科技大学oj题目代码
包括简单数学 组合数学 动态规划 贪心算法 母函数 搜索算法 组合博弈论 计算几何 等等
杭电OJ(1000-1099) AC 代码