题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5968

思路:先把所有的连续异或值保存起来,排序,然后用二分找到距离x最近的那个点,判断即可;

 

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <bitset>
#include <iostream>
#include <time.h> typedef long long LL; using namespace std; const int N = ;
const double eps = 1e-;
const int INF = 0x3f3f3f3f;
const int mod = ; struct node
{
int len, num;
}c[N*N]; int a[N], b[N], k, c1[N*N], c2[N*N]; bool cmp(node p, node q)
{
if(p.num!=q.num)
return p.num<q.num;
return p.len < q.len;
} int Find(int num)
{
int pos = upper_bound(c1, c1+k, num)-c1;
return c2[pos-];
} int solve(int x)///Find x in the c[];
{
int pos = lower_bound(c1, c1+k, x)-c1; if(pos == || c1[pos] == x)///如果数组中含有x,那就找到异或值为x的最大长度;
return Find(c1[pos]); int p = abs(c1[pos]-x);
int q = abs(c1[pos-]-x);
int ans1 = Find(c1[pos]);
int ans2 = Find(c1[pos-]); if(p < q || (p == q && ans1>ans2))
return ans1;
return ans2;
} int main()
{
int T, n, m; scanf("%d", &T); while(T --)
{
scanf("%d", &n); memset(a, , sizeof(a));
memset(b, , sizeof(b));
memset(c, , sizeof(c)); for(int i=; i<=n; i++)
{
scanf("%d", &a[i]);
b[i] = b[i-]^a[i];
} k = ; for(int i=; i<=n; i++)/// the length is i;
{
for(int j=; i+j-<=n; j++)/// from j to j+i;
{
int num = b[j+i-]^b[j-];
c[k].len = i;
c[k++].num = num;
}
} sort(c, c+k, cmp); for(int i=; i<k; i++)
{
c1[i] = c[i].num;
c2[i] = c[i].len;
} scanf("%d", &m); for(int i=; i<=m; i++)
{
int x; scanf("%d", &x); int ans = solve(x); printf("%d\n", ans);
}
printf("\n");
}
return ;
}

异或密码---hdu5968(CCPC合肥,二分)的更多相关文章

  1. HDU5968 异或密码 —— 二分 + 边界的细节处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5968 异或密码 Time Limit: 2000/1000 MS (Java/Others)    M ...

  2. HDU 5968 异或密码 【模拟】 2016年中国大学生程序设计竞赛(合肥)

    异或密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Des ...

  3. hdu_5968_异或密码(预处理+二分)

    题目链接:hdu_5968_异或密码 题意: 中午,不解释 题解: 前缀处理一下异或值,然后上个二分查找就行了,注意是unsigned long long #include<bits/stdc+ ...

  4. [HDU5968]异或密码

    [HDU5968]异或密码 题目大意: 数据共\(T(T\le100)\)组.每组给定一个长度为\(n(n\le100)\)的非负整数序列\(A(A_i\le1024)\),\(m(m\le100)\ ...

  5. HDU 5968 异或密码

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  6. HDU-5968异或密码

    超级传送门 题目描述: 晨晨在纸上写了一个长度为N的非负整数序列{ai}.对于这个序列的一个连续子序列{al,al+1,…,ar}晨晨可以求出其中所有数异或的结果 alxoral+1xor...xor ...

  7. BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)

    题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出 ...

  8. 2016 CCPC 合肥赛区 平行四边形//打铁记录..... 背锅还是我在行 此处@ctr 233

    也希望自己记住这些题并不是真的很难很难... 平行四边形... 这个题要两个直线上的两个点和给出点中的两个点组成的平行四边形面积最大. 确定两个点后,发现线上的点随之确定.那么我们解出线上的点 然后求 ...

  9. HDU 5968:异或密码(暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=5968 题意:中文题意. 思路:一开始不会做,后来发现数据范围很小,而且那个数要是连续的,所以可能把所有情况枚举出 ...

随机推荐

  1. jQuery treetable【表格多重折叠树功能及拖放表格子元素重新排列】

    今天有个表格需求做到多重折叠子元素功能,仔细想了下实现原理, 1.在html中,把父子节点的关系写在自定义属性,但对于节点是否有孩子(hasChild),是否是最后一个节点(isLastOne),是否 ...

  2. Android 笔记 day2 拨号器

  3. [MongoDB]Mongo基本使用:

    汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB ...

  4. 机器学习实战-python相关软件库的安装

    1 安装python 2 安装sublime text2 3 安装NumPy.Matplotlib http://book.51cto.com/art/201401/426522.htm Matplo ...

  5. JupyterNotebook如何添加table of content

    不要总是等待,而是去创造 方法一 ipython notebook升级成了jupyter notebook,在4.x之后的版本,jupyter提供了jupyter-nbextension命令来安装和启 ...

  6. java中的继承与oc中的继承的区别

    为什么要使用继承? 继承的好处: (1)抽取出了重复的代码,使代码更加灵活 (2)建立了类和类之间的联系 继承的缺点: 耦合性太强 OC中的继承 1.OC中不允许子类和父类拥有相同名称的成员变量名:( ...

  7. webbench之编译安装(一)

    1.编译安装:   1 2 3 4 [root@hexuweb102 ~]$wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar ...

  8. JSON.stringify() / JSON.parse()

    JSON.stringify() 这个方法可以把javascript对象转换成json字符串. JSON.parse() 这个方法可以把 json 字符串转换成 javascript对象. [下面来看 ...

  9. iOS 自定义的CodeSnippets添加按下tab键切换到指定输入位置

    在需要使用tab来选中并输入内容的地方,添加: <#输入待覆盖的内容#>

  10. 创业方向:O2O及移动社交 from 沈博阳

    十个最大的互联网公司,六个在美国,四个在中国 中国创业的特殊 市场巨大self-contained,做足中国市场就很够 ... ... 监管   领导力,人的要求 之前成功带领过团队 有海外的工作经历 ...