[51nod]2128 前缀异或【数学题】

18人阅读 评论(0) 收藏 举报
分类:

2128 前缀异或

基准时间限制:2 秒 空间限制:131072 KB 分值: 5 难度:1级算法题


输入一个长度为n(1<=n<=100000)数组a[1],a[2],...,a[n]
输入一个询问数m(1<=m<=100000)和m组询问,每组询问形如(l,r)
对于每组询问(l,r),你需要输出a[l]xora[l+1]xor...xora[r1]xora[r],即第l个数字到第r个数字的异或。
如果你的算法需要约nm的时间,你将只能通过第一个测试点。
如果你的算法需要约n+m的时间,你将可以通过本题。

Input
第一行一个整数n
第二行为n个整数a[1], a[2], … a[n]
第三行一个整数m
接下来m行,每行两个整数l, r表示询问。

Output
输出一共m行,对于每一个询问输出一个整数表示结果。

Input示例

3
1 2 3
6
1 1
2 2
3 3
1 2
2 3
1 3

Output示例

1
2
3
3
1
0

wwwwodddd (题目提供者)
C++的运行时限为:2000 ms ,空间限制为:131072 KB 示例及语言说明请按这里

题解
我们知道Xor同一个数两次等于什么都没干,那么就令sum[i]=a[1] xor a[2] xor…xor a[i],我们取答案时就sum[R] xor sum[L-1]就可以了。Xo r在C++里是 ^。

代码如下

#include<cstdio>
using namespace std;
int n,q,a[100005];
int main(){
//  freopen("prob.in","r",stdin);
//  freopen("prob.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        a[i]^=a[i-1];
    }
    scanf("%d",&q);
    for(int i=1;i<=q;i++){
        int L,R;scanf("%d%d",&L,&R);
        printf("%d\n",a[R]^a[L-1]);
    }
    return 0;
}
查看评论

51nod 1847 奇怪的数学题

51nod 1847 奇怪的数学题原题链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1847定义:sgcd(a...
  • ZLH_HHHH
  • ZLH_HHHH
  • 2017-10-22 11:14:12
  • 261

前缀异或:XOR Segment (用的是前缀和的思想,所以暂且称这个方法为前缀异或)

XOR Segment Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Tota...
  • czkct
  • czkct
  • 2016-03-12 13:42:09
  • 1231

51nod1301 集合异或和

枚举+动态规划
  • sdfzyhx
  • sdfzyhx
  • 2017-07-09 11:42:40
  • 237

51nod 1031 骨牌覆盖 (找规律题_数学)

在2*N的一个长方形方格中,用一个1*2的骨牌排满方格。 问有多少种不同的排列方法。 例如:2 * 3的方格,共有3种不同的排法。(由于方案的数量巨大,只输出 Mod 10^9 + 7...
  • h1021456873
  • h1021456873
  • 2015-10-21 20:49:23
  • 890

Wannafly挑战赛1 Xorto(前缀异或+思维)

题目链接:点击打开链接 思路:开始没理解题意啥意思,两个不相交区间的异或和,其实就是两个区间的的数一块做异或,两个区间的异或和为0,也就是两个区间的异或和相等。联想到了前缀和,可以预处理一下区间前缀异...
  • ccDLlyy
  • ccDLlyy
  • 2017-10-14 11:14:45
  • 254

51nod 异或凑数

此题是一道有关 异或的秩的题目,已经有解题报告了,不过感觉解题报告里没看到 严格的证明,所以记录下自己的思路。 这道题要算给定区间内能否存在数异或成给定的数K。 首先数目达到500000,所以要考...
  • liuxingwan
  • liuxingwan
  • 2016-12-08 11:50:07
  • 217

tjut 1847

#include using namespace std; int main(void) { int n; while(scanf("%d",&n)==1) { ...
  • luozhong11
  • luozhong11
  • 2016-09-17 09:06:21
  • 82

[51nod1301]集合异或和

题目大意已知两个整数N与M,你需要构造两个整数集合X与Y,且需要满足以下要求: (1)对所有的xi∈X,满足1...
  • WorldWide_D
  • WorldWide_D
  • 2016-12-02 20:03:44
  • 710

两道超强的数学题

第一题:展开多项式 =========================================第二题:找到X!
  • softwave
  • softwave
  • 2007-05-21 20:02:00
  • 1487

51nod 1280 前缀后缀集合(set)

1280 前缀后缀集合 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 ...
  • yjf3151731373
  • yjf3151731373
  • 2017-08-31 00:58:08
  • 170
    个人资料
    持之以恒
    等级:
    访问量: 4416
    积分: 1052
    排名: 4万+
    友情链接
    文章存档
    最新评论