题解:求一个序列问长度为偶数且在[L, R]范围内的异或和的和,这个题考察的异或和的问题,因为异或和的话就要牵扯到二进制,所以一般来说这类问题就是将其拆开来进行计算。
首先:异或计算

1xor1=0,0xor0=0,1xor0=1

很容易可以得到一个结论,就是在某位上的时候,只有1才会影响到他的值,当1的个数为奇数时,二进制那个位置上才会计算出1这个数字。因为此题是处理一个区间的问题,为了减少时间复杂度,我们可以用到前缀和这个工具就是这样子

for(int i=1;i<=n;i++){scanf("%d",&a[i]);a[i]=a[i]^a[i-1];
}

这个题又有一个条件:保证区间为偶数,所以

if(l&1) l++;
if(r&1) r--;

接下来枚举二进制的1-32位每个位置的情况,计算出最终结果每一位上有多少个1是在符合条件的亦或过程中产生的,然后加权求和就可以。因为这个题目需要的区间是偶数长度的区间,因此如果j是奇数,则以j为右边界的满足条件的区间的左边界肯定都是奇数。如果j是偶数,则以j为右边界的满足条件的区间的左边界肯定都是偶数。因此为了计算满足以第j个数字为结尾的符合条件的区间其第i位的贡献,所以我们需要分奇数和偶数。

#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 1e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1e9+7;
using namespace std;
int a[maxn];
int dp[10][10];
int main()
{int n,l,r;cin>>n>>l>>r;if(l==r){cout<<0<<endl;return 0;}for(int i=1;i<=n;i++){scanf("%d",&a[i]);a[i]=a[i]^a[i-1];}if(l&1) l++;if(r&1) r--;ll ans=0;for(int i=0;i<32;i++){memset(dp,0,sizeof(dp));ll sum=0,temp=1<<i;for(int j=l;j<=n;j++){dp[(a[j-l]>>i)&1][(j-l)&1]++;sum+=dp[((a[j]>>i)&1)^1][j&1];if(j>=r) dp[(a[j-r]>>i)&1][(j-r)&1]--;}ans=(ans+temp*sum%mod)%mod;}cout<<ans<<endl;return  0;}

NC14414 小AA的数列相关推荐

  1. 数学小故事之 数列极限|当“夹逼定理”爱上“定积分定义”

                                                                            真真假假,假假真真                    ...

  2. jzoj6275-[NOIP提高组模拟1]小L的数列【矩阵乘法,欧拉定理】

    正题 题目大意 有递推式fi=∏j=1kfi−jbjf_{i}=\prod_{j=1}^kf_{i-j}^{b_j}fi​=j=1∏k​fi−jbj​​ 给出f1∼kf_{1\sim k}f1∼k​和 ...

  3. 小魂和他的数列(dp+树状数组优化)

    链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...

  4. 陕西师范大学第七届程序设计竞赛网络同步赛 J 黑猫的小老弟【数论/法拉数列/欧拉函数】...

    链接:https://www.nowcoder.com/acm/contest/121/J 来源:牛客网 题目描述 大家知道,黑猫有很多的迷弟迷妹,当然也有相亲相爱的基友,这其中就有一些二五仔是黑猫的 ...

  5. 再论凭中学数学常识发现中学数学一系列重大错误——数列最起码常识让5千年都无人能识的自然数一下子暴露出来

    再论凭中学数学常识发现中学数学一系列重大错误                 --数列最起码常识让5千年都无人能识的自然数一下子暴露出来 黄小宁(通讯:广州市华南师大南区9-303 邮编510631) ...

  6. 本题要求将给定的n个整数从大到小排序后输出。

    本题要求将给定的n个整数从大到小排序后输出. 输入格式: 输入第一行给出一个不超过10的正整数n.第二行给出n个整数,其间以空格分隔. 输出格式: 在一行中输出从大到小有序的数列,相邻数字间有一个空格 ...

  7. 以每行5个数输出fib前20 c语言循环,打印Fibonacci数列方法汇总(前20项,每行5个)...

    NO.1 迭代法 标签:通俗.易懂 思路:先打印第一项.再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余). #inc ...

  8. 沈阳师范大学PTA百题刷分

    沈阳师范大学PTA百题刷分 6-1 函数选择法排序 (10分) 用选择法对数组a 进行由小到大的排序. 函数接口定义: void fun(int a[],int n) 其中a和n都是用户传入的参数,函 ...

  9. C语言经典编程题100例(61~80)

    目录 61.练习7-7 矩阵运算 62.练习7-8 方阵循环右移 63.习题6-1 分类统计字符个数 64.习题6-2 使用函数求特殊a串数列和 65.习题6-4 使用函数输出指定范围内的Fibona ...

最新文章

  1. python【力扣LeetCode算法题库】876- 链表的中间结点
  2. 剑指Offer #05 用两个栈实现队列(模拟)
  3. ABAP中的动态运算函数
  4. 2019.3.1版本pycharm撤销及恢复图解
  5. java如何打开整个package_Qulice - 如何在整个项目中禁用需要package-info.java的规则?...
  6. 龙图 VP 李翀:数据化运营及云计算下的运维
  7. Postico —— OS X 上的免费 PostgreSQL 客户端
  8. Git中的bash与CMD的区别
  9. java jtextfield 事件_java – 处理JTextField中的编辑事件
  10. iis php5.2 cgi,在PHP 5.2.6 / IIS CGI中清空$_POST数组
  11. 电脑雕刻教程_C4D无敌渲染神器! 阿诺德全套预设+案例教程+3.0汉化插件合集!真香!【810期】...
  12. java中的问题_java中一些常见问题
  13. 【变废为宝】电信IPTV中兴zxv10 b860Av1.1
  14. dw做注册登录页面HTML代码,用DW做的简单的个人网站(可以用来当网页作业)
  15. 【三维GIS】Google Map/Google Earth三维模型提取
  16. vm 无法打开本地文件进行写入
  17. RQNOJ 341 星门跳跃【解题报告】
  18. HC-05蓝牙模块配对方法及AT指令配置
  19. 计算机毕业设计-springboot企业考勤管理系统(前后端分离)员工考勤管理系统-公司日常管理系统java代码
  20. CentOS7中使用yum安装php5.6的方法

热门文章

  1. ACMNO.44 C语言-平均分 有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
  2. 虚拟机CENTOS7下 安装8.0版本MySQL MySQL主从配置详细~
  3. 如何实现C++中的多线程编程
  4. 【OpenCV 4开发详解】图像修复
  5. 【OpenCV 4开发详解】图像距离变换
  6. 推荐一些顶级的Android开发书籍(转)
  7. C# Aop简单扫盲及ORM实体类属性拦截示例
  8. virsh 常用操作
  9. Silverlight实用窍门系列:52.Silverlight中的MVVM框架极速入门(以MVVM Light Toolkit为例)...
  10. 最新dnsmasq安装部署详解(centos6)