码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 elegant_sequence(优雅的序列)

时间:2017-09-23 00:04:09      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:奇数   数据结构   blog   table   http   ***   span   整数   col   

数据结构 elegant_sequence(优雅的序列)

 

问题描述

  如果一个序列的元素的异或和等于 1,我们称这个序列为优雅的序列。现在
给你一个 01 序列,和 m 次询问。对于每次询问,给出 l,r。请你输出子序列 a[l..r]
的异或和。


★数据输入
输入第一行为正整数 n, m。
第二行为 n 个正整数 a[1..n]。 (1<=ai<=10^9)
接下来的 m 行,每行两个数 l,r。 (1<=l<=r<=n)
80%的数据 1<=n,m<=1000.
100%的数据 1<=n,m<=100000.


★数据输出
输出 m 行,每行一个数表示 a[l…r]的异或和。

输入示例 输出示例
3 6
1 1 0
1 1
1 2
1 3
2 2
2 3
3 3
1 0 0 1 1 0


Hint
数列下标从 1 开始。

 

解题思路

  奇数个1的异或和为1,偶数个1的异或和为0

  类似  [coprime_sequence(互质序列)](http://www.cnblogs.com/cbattle/p/7577344.html),用数组记录中间值

  ********************************************************************************

  写完后发现之用算从左到右的值存入left[] ,L到R的异或和为left[R]-left[L-1]

  ********************************************************************************

 

code

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3  
 4 int p[100002];
 5 int left[100002]={0};
 6 int right[100002]={0};
 7 
 8 int main()
 9 {
10     int i,j;
11     int len,ask,l,r;
12     int onenum=0;
13     
14     scanf("%d %d",&len,&ask);
15     for(i=1;i<=len;i++)
16     {
17         scanf("%d",p+i);
18         if(p[i]==1) onenum++;
19     }
20     
21     for(i=1;i<=len;i++)
22     {
23         if(i==1)
24             left[i] = p[i];
25         else
26             left[i] = left[i-1] + p[i];
27     }
28     for(i=len;i>=1;i--)
29     {
30         if(i==len)
31             right[len] = p[len];
32         else
33             right[i] = right[i+1] + p[i];
34     }
35 //    for(i=1;i<=len;i++) printf("%d ",p[i]); printf("\n");
36 //    for(i=1;i<=len;i++) printf("%d ",left[i]); printf("\n");
37 //    for(i=1;i<=len;i++) printf("%d ",right[i]); printf("\n");
38     for(i=0;i<ask;i++)
39     {
40         scanf("%d %d",&l,&r);
41         int num;
42         if(l==1)
43             num = onenum - right[r+1];
44         else if(r==len)
45             num = onenum - left[l-1];
46         else
47             num = onenum - left[l-1] - right[r+1];
48         
49         printf("%d\n",num%2);
50     }
51     
52     return 0;
53 }

 

数据结构 elegant_sequence(优雅的序列)

标签:奇数   数据结构   blog   table   http   ***   span   整数   col   

原文地址:http://www.cnblogs.com/cbattle/p/7577461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!