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

题目大意:给定数组 a[]={0,1,2......n} 求一个数组b[] 元素也为0.....n 但顺序与a[]不同

使得 sum(ai ^ bi)最大

注意到2^k =100000(k个0)  2^k-1 =11111(k个1)

那么 (2^k) ^ (2^k-1)=111111(k+1个1)等于 2^(k+1)-1  同样的有 (2^k+1) ^ (2^k-2)=2^(k+1)-1;

此时 显然元素中的"1"得到了最为充分的利用,所得结果即为最大值

所以只需要考虑每一个小于等于n的  2的整数次方,对称的进行分配即可

代码如下

#include <iostream>
#include <stdio.h>
#include <memory.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 10000
int p[]={, , , , ,, , , , ,, , , , ,,};
bool vi[];
int a[];
int b[];
int ans[];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(vi,,sizeof(vi));
long long res=;
for(int i=;i<=n;i++)
scanf("%d",a+i);
int k;
for(k=;k>=&&p[k]>n;k--);
while(k>=)
{
int i=p[k]-;
int j=p[k];
for(;i>=&&j<=n;i--,j++)
{
if(vi[i]||vi[j])
break;
res+=*(j^i);
ans[i]=j;
ans[j]=i;
vi[i]=;
vi[j]=;
}
k--;
}
if(vi[]==)
ans[]=;
printf("%I64d\n",res);
for(int i=;i<=n;i++)
{
printf("%d",ans[a[i]]);
if(i==n)
printf("\n");
else
printf(" ");
}
} return ;
}

hdu5014:number sequence对称思想的更多相关文章

  1. HDU 1005 Number Sequence

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  2. POJ 1019 Number Sequence

    找规律,先找属于第几个循环,再找属于第几个数的第几位...... Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submi ...

  3. HDOJ 1711 Number Sequence

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. Number Sequence

    Number Sequence   A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) ...

  5. [AX]AX2012 Number sequence framework :(三)再谈Number sequence

    AX2012的number sequence framework中引入了两个Scope和segment两个概念,它们的具体作用从下面序列的例子说起. 法国/中国的法律要求财务凭证的Journal nu ...

  6. KMP - HDU 1711 Number Sequence

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. hdu 1005:Number Sequence(水题)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. Number Sequence 分类: HDU 2015-06-19 20:54 10人阅读 评论(0) 收藏

    Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...

  9. HDU 1711 Number Sequence(数列)

    HDU 1711 Number Sequence(数列) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...

随机推荐

  1. Day02_VI基本操作及C基础

    2013年09月30日 星期一 09时37分03秒 回顾:     1. linux系统的知识背景     2. vi的使用 在正常模式下使用nyy可以把光标所在行开始的连续n行拷贝到剪贴板上去 在正 ...

  2. 数据库版本管理工具Flyway(4.0.3)---工作机制(译文)

    How Flyway works The easiest scenario is when you point Flyway to an empty database. 最容易的方案是Flyway指向 ...

  3. 正则表达式JSP实例

    <%@ page language="java" import="java.util.*,cn.com.Person,cn.com.Adddress" p ...

  4. [Angular 2] Using Promise to Http

    You can also use Promise for http: So for the service, you need to call toPromise() method: getVehic ...

  5. mysql求时间差

    SELECT TIMESTAMPDIFF(SECOND, now(), "2012-11-11 00:00:00") 语法为:TIMESTAMPDIFF(unit,datetime ...

  6. swift和oc混编

    请参考这篇博客:点击查看

  7. 判断Http请求由手机端发起,还是有电脑端发起

    某些情形,我们需要判断Http请求是来自手机端还是电脑端,关键是取得User-Agent的信息,进行筛选判断即可. 核心类如下: public static boolean isMobileDevic ...

  8. AngularJs练习Demo19 Resource

    @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...

  9. java事件演示

    package cn.stat.p3.windowdemo; import java.awt.Button; import java.awt.FlowLayout; import java.awt.F ...

  10. SQL GROUP BY 语句

    合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 ...