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

CodeForces 288C - Polo the Penguin and XOR operation(思维)

时间:2015-06-21 18:35:41      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

题意:

就是让你构造一个序列,使得序列异或和最大,序列为n 的全排列 ,序列和计算方式为   SUM  =   a[1] ^ 0 + a[2] ^ 1 + a[3] ^ 2 + .......a[n] ^ n 

构造出一个序列使得和最大

题解:

策略为使得每次异或出来的结果的1尽可能多,而优先从最大的n  开始考虑,因为n  最有可能出更大的数字

代码:

#include<stdio.h>
#include<string.h>
int Ans[1000005];
int main()
{
    int n, x;
    while(scanf("%d", &n) != EOF)
    {
         x = 1;

         while(x <= n)  x = x<<1;
         x --;
         memset(Ans, 255, sizeof(Ans));
         for(int i = n; i>= 0; i--)
         {
             if(Ans[i] != -1) continue;
          //   printf("%d\n", x);
             while((x^i) > n || Ans[x^i] != -1)  x = x>>1;
        //     printf("%d %d\n", i, x);
             Ans[x^i] = i, Ans[i] = x^i;
         }
         __int64 sum = 0;
         for(int i = 0; i <= n; i++)
         {
             sum += (i^Ans[i]);
         }
         printf("%I64d\n%d", sum, Ans[0]);
         for(int i = 1; i <= n;  i++)
         printf(" %d", Ans[i]);
         printf("\n");
    }
}

CodeForces 288C - Polo the Penguin and XOR operation(思维)

标签:

原文地址:http://blog.csdn.net/q651111937/article/details/46582493

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