首页 > 代码库 > hdu 5014 Number Sequence
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? ‘\n‘ : ‘ ‘));
完整代码如下:
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\n", 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? ‘\n‘ : ‘ ‘));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 }
hdu 5014 Number Sequence
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。