zoukankan      html  css  js  c++  java
  • hdu 5014 Number Sequence

    为了a异或b的和最大,只需另b在不大于n的情况下按位取反即可。

    这里有两个输出小技巧可以参考:

    1.在用printf输出__int64时,在windows下使用格式"%I64d",在linux下使用"%lld",在hdu中应使用"%I64d",如果拿不准就是用cout好了。

    2.在遇到每个数之间有空格,最后一个数后面是换行时可以使用这个小技巧:

    for (int i = 0; i < n; i++ ) printf("%d%c", a[i], (i == n-1? '
    ' : ' '));

    完整代码如下:

     1 #define MAXN 100005
     2 #include <stdlib.h>
     3 #include <iostream>
     4 #include <stdio.h>
     5 using namespace std;
     6 int arr[MAXN];
     7 int ans[MAXN];
     8 bool vis[MAXN];
     9 int n;
    10 void solve()
    11 {
    12     for( int i = n-1 ; i >= 0 ; i-- )
    13     {
    14         if( vis[i] == 0 )
    15         {
    16             int bit = 1;
    17             while(bit <= i)
    18             {
    19                 bit <<= 1;
    20             }
    21             ans[bit-1-i] = i;
    22             ans[i] = bit - 1 - i;
    23             vis[i] = vis[bit-1-i] = 1;
    24         }
    25     }
    26     printf("%I64d
    ", 1ll * n * (n-1));
    27     //cout<<1ll * n *(n-1)<<endl;
    28     for( int i = 0 ; i < n ; i++ )
    29     {
    30         printf("%d%c",ans[arr[i]], (i == n-1? '
    ' : ' '));
    31     }
    32     fill(vis, vis+MAXN, 0);
    33 }
    34 int main(int argc, char *argv[])
    35 {
    36     while(scanf("%d", &n) != EOF)
    37     {
    38         n++;
    39         for( int i = 0 ; i < n ; i++ )
    40         {
    41             scanf("%d", &arr[i]);
    42         }
    43         solve();
    44     }
    45 }
  • 相关阅读:
    一分钟 解决Tomcat端口 占用问题
    Java 自定义注解
    Java 解析自定义XML文件
    Junit(手动/自动)加载
    Java思维题
    SSM框架中使用日志框架
    DAC
    SPI接口的FLASH
    晶振测试起振方法
    Jlink不报错的方法
  • 原文地址:https://www.cnblogs.com/jostree/p/3996122.html
Copyright © 2011-2022 走看看