2014年百度之星程序设计大赛 - 资格赛 第三题 Xor Sum
2015-12-31 08:52
281 查看
小记:艹蛋呢, 取long long的低30,32,34位都WA, 取31位才AC。
。。
思路:依据求数组中两个数异或最大值。參考
代码:
。。
思路:依据求数组中两个数异或最大值。參考
代码:
#include <stdio.h> #include <string.h> #define MAX(a,b) ((a)>(b)?(a):(b)) #define NODE 3200010 #define N 100010 int n; int v ; int node; int next[NODE][2]; int end[NODE]; void add(int cur,int k) { memset(next[node],0,sizeof(next[node])); end[node]=0; next[cur][k]=node++; } int cal(int x) { int i,k,cur=0; for(i=30; i>=0; i--) { k=((1<<i)&x)? 0:1; if(next[cur][k]) cur=next[cur][k]; else cur=next[cur][1-k]; } return end[cur]; } int main() { int n, i, ans, T, m, t,x, cur, j, k; scanf("%d", &T); for(int Ca = 1; Ca <= T; ++Ca) { scanf("%d%d", &n, &m); node=1; memset(next[0],0,sizeof(next[0])); for(i=0; i<n; i++) { scanf("%d",&x); v[i]=x; cur=0; for(j=30; j>=0; j--) { k=((1<<j)&x)?1:0; if(next[cur][k]==0) add(cur,k); cur=next[cur][k]; } end[cur]=x; } printf("Case #%d:\n",Ca); for (i = 0; i < m; ++i) { scanf("%d", &t); ans = cal(t); printf("%d\n", ans); } } return 0; }
相关文章推荐
- 快捷键
- Android更改桌面应用程序launcher的两种方式
- Ceph蹚坑笔记 - (1)
- 简单谈谈JavaScript的同步与异步
- Node.js操作SQLite3
- HBase Bulk Loading 实践
- 挑战编程题(二)
- 嵌入式系统
- Uva11374
- 1475 建设国家
- hdu2680
- Android自定义开关按钮
- LVM逻辑卷管理-卷的缩减和扩容
- jQuery实现简单的图片查看器
- Android TabLayout重设Tab点击事件
- php-支付宝接口
- Qt 获取usb设备信息 hacking
- VC6/WTL/Platform SDK等
- 解决几个服务的小问题
- 【剑指offer】出现次数超过一半的数字