原题链接

题意

  • 目前我们有一个长为n的序列,我们可以对其中的每一个数进行任意的二进制重排(改变其二进制表示结果的排列),问我们进行若干次操作后得到的序列,最多能有多少对 \(l, r\) 使得 \([l, r]\)区间内的异或和为0。

思路

  • 首先注意到“二进制重排”,实际上也就是说,\(a_i\)是多少不重要,有用的信息是它本身有多少个1。

  • 然后,\([L, r]\)内异或和为0,可以认为是这个区间内的1能够相互抵消。那么这个区间内1的个数一定是偶数个。

  • 我们考虑1的个数为偶数个的情况下,如何才会出现不能相互抵消的情况。这种“特殊情况”其实就是存在一个数,它的1的数量比其他的数加起来都多。除了这种情况外,其他情况下都可以全部抵消。

  • 那么我们可以预处理出 \(pre[i]\),代表\(1 - i\)中有多少个1,然后从头开始扫描,同时记录两个变量,一是\(1 - i - 1\)中有多少个\(pre[j]\)为奇数,二是多少个为偶数。然后我们在\(i\)处时,给答案加上代表与\(pre[i]\)相同奇偶性的变量即可。

  • 在扫描的同时,我们需要减去答案中的所有符合“特殊情况”的\([l, i]\)区间数量。但是我们并不需要从1开始枚举,因为每个二进制数最多不超过63个1,所以事实上我们的枚举范围为\([i - 63, i]\)即可,剩下的长度大于63的区间一定不会符合“特殊情况”。

AC代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map> using namespace std; const int N = 300000; long long abss(long long a)
{
if (a < 0)
{
a = -a;
}
return a;
} long long n;
long long xx;
long long aa[N + 5] = {0}, su[N + 5];
long long mm[105] = {0}; int main()
{
mm[0] = 1;
scanf("%lld", &n);
long long ans = 0;
su[0] = 0;
for (int i = 1; i <= n; ++i)
{
scanf("%lld", &xx);
while (xx)
{
if (xx & 1)
{
++aa[i];
}
xx >>= 1;
}
su[i] = su[i - 1] + aa[i];
}
long long l[2] = {1, 0};
aa[0] = 0;
for (int i = 1; i <= n; ++i)
{
int bitt = su[i] & 1;
ans += l[bitt];
long long mx = aa[i];
long long rem = 0;
for (int j = i - 1; j >= 0 && j >= i - 63; --j)
{
if ((su[i] - su[j]) % 2 == 0 && rem < mx)
{
--ans;
}
if (mx < aa[j])
{
rem += mx;
mx = aa[j];
}
else
{
rem += aa[j];;
}
}
++l[bitt];;
}
printf("%lld", ans);;
return 0;
}

CodeForces 1030E Vasya and Good Sequences 位运算 思维的更多相关文章

  1. codeforces 245 D. Restoring Table(位运算+思维)

    题目链接:http://codeforces.com/contest/245/problem/D 题意:给出一个矩阵b,b[i][j]=a[i]&a[j],b[i][i]=-1.然后求a[i] ...

  2. Codeforces Round #716 (Div. 2), problem: (B) AND 0, Sum Big位运算思维

    & -- 位运算之一,有0则0 原题链接 Problem - 1514B - Codeforces 题目 Example input 2 2 2 100000 20 output 4 2267 ...

  3. Codeforces Round #443 (Div. 2) C 位运算

    C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. Codeforces F. Bits And Pieces(位运算)

    传送门. 位运算的比较基本的题. 考虑枚举\(i\),然后二进制位从大到小考虑, 对于第\(w\)位,如果\(a[i][w]=1\),那么对\(j.k\)并没有什么限制. 如果\(a[i][w]=0\ ...

  5. 【洛谷4424】[HNOI/AHOI2018] 寻宝游戏(位运算思维题)

    点此看题面 大致题意: 给你\(n\)个\(m\)位二进制数.每组询问给你一个\(m\)位二进制数,要求你从\(0\)开始,依次对于这\(n\)个数进行\(and\)或\(or\)操作,问有多少种方案 ...

  6. Codeforces 631 (Div. 2) D. Dreamoon Likes Sequences 位运算^ 组合数 递推

    https://codeforces.com/contest/1330/problem/D 给出d,m, 找到一个a数组,满足以下要求: a数组的长度为n,n≥1; 1≤a1<a2<⋯&l ...

  7. Codeforces 734F Anton and School(位运算)

    [题目链接] http://codeforces.com/problemset/problem/734/F [题目大意] 给出数列b和数列c,求数列a,如果不存在则输出-1 [题解] 我们发现: bi ...

  8. CodeForces 558C Amr and Chemistry (位运算,数论,规律,枚举)

    Codeforces 558C 题意:给n个数字,对每一个数字能够进行两种操作:num*2与num/2(向下取整),求:让n个数相等最少须要操作多少次. 分析: 计算每一个数的二进制公共前缀. 枚举法 ...

  9. [Codeforces 1053B] Vasya and Good Sequences

    Link: Codeforces 1053B 传送门 Solution: 其实就是暴力 观察需要满足的条件: 1.个数和为偶数 2.最大个数不大于其它所有个数的和 如果只有第一个条件记录前缀和的奇偶性 ...

  10. [Codeforces 1058E] Vasya and Good Sequences

    [题目链接] https://codeforces.com/contest/1058/problem/E [算法] 显然 , 我们只需考虑序列中每个数的二进制表示下1的个数即可. 不妨令Ai表示第i个 ...

随机推荐

  1. tmai

    天猫精灵技能应用平台合作协议 发布日期:2020年03月18日 更新日期:2021年02月01日 鉴于您(语音技能.小程序或应用程序APP等的制作.提供或开发者)希望入驻或与天猫精灵技能应用平台(又称 ...

  2. 【XXE漏洞】原理及实践演示

    一.原理 XML是用于传输和存储数据的一种格式,相当于一种信息传输工具,其中包含了XML声明,DTD文档类型定义.文档元素. XXE是xml外部实体注入漏洞,发生在应用程序解析XML输入时,没有禁止外 ...

  3. 强化学习的一周「GitHub 热点速览」

    当强化学习遇上游戏,会擦出什么样的火花呢?PokemonRedExperiments 将经典的 Pokeman 游戏接上了强化学习,效果非同凡响,不然能一周获得 4.5k star 么?看看效果图就知 ...

  4. 关于Windows打印机驱动相关问题-如何利用Java(或其他)调用打印机驱动程序完成原始文件翻译为PCL语言的步骤

    前面这些都是问题描述,问题在偏下面 场景:用户电脑上安装了PCL驱动,可通过驱动完成打印. 需求:现在需要提供一种脱离PC端完成文件上传并打印的功能.让用户使用手机或pc未安装驱动时都能打印文件. 目 ...

  5. docker本地仓库-registry

    Docker本地私有仓库实战: docker仓库主要用于存放docker镜像,docker仓库分为公有仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下: 节省网络带宽, ...

  6. Unity禁止C#自动编译

    基于unity2017\2020版本 using System; using System.Linq; using System.Reflection; using UnityEditor; usin ...

  7. 周藤 CSP-2023游记

    Day -inf~Day -2 基本上是考试状态,每天我都是自己取随机题目做,不过也保证了落实量 每场模拟赛发挥基本上是不是特别稳定,考得好的时候AK了,考不好的时候只有300分,反正同届差不多第一吧 ...

  8. Python自动化处理Excel数据

    需求描述:数据格式如下所示,需要分离出2023年7月1号之后的数据明细 数据核对与处理:从Excel文件中提取特定日期后的签收数据 1. 引言 在实际数据处理和分析过程中,经常会遇到需要从大量数据中提 ...

  9. [Python急救站课程]天天向上的力量

    我们要"好好学习,天天向上."那么天天向上的力量到底有多强呢? 1.一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原 ...

  10. 等保测评之主机测评——Centos7

    目录 基础信息收集 (一)身份鉴别 (二)访问控制 (三)安全审计 (四)入侵防范 (五)恶意代码防范 (六)可信验证 (七)数据完整性 (八)数据保密性 (九)数据备份恢复 (十)剩余信息保护 命令 ...