HDU 5014 异或之和
2016-07-19 17:30
405 查看
http://acm.hust.edu.cn/vjudge/contest/122814#problem/H
这道题就是求异或之和
知识点: a^b = c 等价于 b^c =a 和 a^c = b
这道题就是求异或之和
知识点: a^b = c 等价于 b^c =a 和 a^c = b
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <cctype> #include <vector> #include <iterator> #include <set> #include <map> #include <sstream> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) #define pf printf #define sf scanf #define spf sprintf #define pb push_back #define debug printf("!\n") #define MAXN 100000 + 10 #define MAX(a,b) a>b?a:b #define blank pf("\n") #define LL long long #define ALL(x) x.begin(),x.end() #define INS(x) inserter(x,x.begin()) #define pqueue priority_queue #define INF 0x3f3f3f3f int n,m; int a[MAXN],b[MAXN]; int main() { int i,j; while(~sf("%d",&n)) { mem(a,0); mem(b,-1); long long sum = 0; for(i=0;i<=n;i++) sf("%d",&a[i]); for(i=n;i>=0;i--) { int s = i; if(b[i] == -1) { int cnt = 0; while(s) { s>>=1; cnt++; } int tmp = (1<<cnt) -1; b[i] = i^tmp; b[i^tmp] = i; } } //for(i=0;i<=n;i++) pf("%d ",b[i]); for(i=0;i<=n;i++) sum+= i^b[i]; pf("%I64d\n",sum); for(i=0;i<n;i++) { pf("%d ",b[a[i]]); } pf("%d\n",b[a ]); } return 0; }
相关文章推荐
- NYOJ 99 单词拼接 欧拉回路或路径
- css和js引用图片的路径问题
- 2016 Multi-University Training Contest 1 hdu 5723 Abandoned country【Kruskal+Dfs】好题
- hdu 5176 The Experience of Love(并查集)
- Linux下运行jmeter
- strcpy,memcpy,memmove的内存重叠
- 解决数据库连接池连接mysql时,每隔8小时mysql自动断开所有连接的问题
- Centos安装MongoDB
- 自我学习总结1:ajax实现编辑框的验证
- 上code之前的test plan
- oracle+关于"SP2-0618:+无法找到会话标识符。启用检查+PLUSTRACE+角色"错误
- 无器械健身锻炼全身肌肉的方法
- android图片压缩
- 9.Smarty的循环
- 通达OA 开发基于AJAX技术数据列表控件的智能表单(图文)
- 通达OA 开发基于AJAX技术数据列表控件的智能表单(图文)
- bootstrap禁用点击空白处关闭模态框
- Xcode操作SVN(高级部分)
- 源码分析-java-AbstractSequentialList
- 多线程脱离状态 + 调度