CodeForces 1030E Vasya and Good Sequences 位运算 思维
题意
- 目前我们有一个长为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 位运算 思维的更多相关文章
- 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] ...
- 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 ...
- Codeforces Round #443 (Div. 2) C 位运算
C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Codeforces F. Bits And Pieces(位运算)
传送门. 位运算的比较基本的题. 考虑枚举\(i\),然后二进制位从大到小考虑, 对于第\(w\)位,如果\(a[i][w]=1\),那么对\(j.k\)并没有什么限制. 如果\(a[i][w]=0\ ...
- 【洛谷4424】[HNOI/AHOI2018] 寻宝游戏(位运算思维题)
点此看题面 大致题意: 给你\(n\)个\(m\)位二进制数.每组询问给你一个\(m\)位二进制数,要求你从\(0\)开始,依次对于这\(n\)个数进行\(and\)或\(or\)操作,问有多少种方案 ...
- 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 ...
- Codeforces 734F Anton and School(位运算)
[题目链接] http://codeforces.com/problemset/problem/734/F [题目大意] 给出数列b和数列c,求数列a,如果不存在则输出-1 [题解] 我们发现: bi ...
- CodeForces 558C Amr and Chemistry (位运算,数论,规律,枚举)
Codeforces 558C 题意:给n个数字,对每一个数字能够进行两种操作:num*2与num/2(向下取整),求:让n个数相等最少须要操作多少次. 分析: 计算每一个数的二进制公共前缀. 枚举法 ...
- [Codeforces 1053B] Vasya and Good Sequences
Link: Codeforces 1053B 传送门 Solution: 其实就是暴力 观察需要满足的条件: 1.个数和为偶数 2.最大个数不大于其它所有个数的和 如果只有第一个条件记录前缀和的奇偶性 ...
- [Codeforces 1058E] Vasya and Good Sequences
[题目链接] https://codeforces.com/contest/1058/problem/E [算法] 显然 , 我们只需考虑序列中每个数的二进制表示下1的个数即可. 不妨令Ai表示第i个 ...
随机推荐
- Django框架——Web应用、基于SOCKET写一个web应用、 手撸简单web框架、http协议、Web框架(手撸自己的Web框架)、django简介以及简单使用
文章目录 1 Web应用 一 Web应用程序是什么 1.1 Web应用程序的优点 1.2 Web应用程序的缺点 1.3 B/S架构优点 二 基于SOCKET写一个web应用 2.1 main.py 2 ...
- 通过unittest加载测试用例的不同方法
使用python+unitest做自动化测试执行时, 执行用例时就涉及测试用例的加载. 即如何把测试cases加载到测试suite,然后进行运行. 一般把用例加载方法分为两大类:通过unittest. ...
- 【源码解读(一)】EFCORE源码解读之创建DBContext查询拦截
引言 在网上很少看到有关于系统讲解EFCore源码的,可能大概也许是因为EFCore的源码总体是没有asp.net web的源码流程清晰,正如群友所说,EFCore的源码大致看起来有点凌乱,与其说凌乱 ...
- 如何打开关闭Edge鼠标手势
概述 今天突然发现edge有了一个鼠标手势,用起来不是很适应,所以决定将其关掉. 操作步骤 点击edge右上角的三个点 在下拉菜单中选择设置 点开设置之后出现如图所示的界面,然后选择外观 往下面拉页面 ...
- [Python急救站课程]简单的人机对话
一个简单的人机对话程序 name = input("输入姓名:") # input输入数据 print("{}同学,学好Python,前途无量!".format ...
- 阿里Java一面,难度适中!(下篇)
上一次因为文章篇幅和个人精力有限的原因,只分享了淘天的前 6 道题及其答案(点击访问上一篇).接下来,咱们把其他几道题面试题及答案也分享给大家. 1.公司简介 淘天集团就是"淘宝" ...
- (Good topic)四因数 (leetcode 181周赛T2)
四因数难度中等1收藏分享切换为英文关注反馈给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和. 如果数组中不存在满足题意的整数,则返回 0 . 示例: 输入:nums ...
- 3款高评价的.Net开发的WMS系统推荐
本文简介 WMS仓库管理系统是一款专业的仓库管理系统,旨在帮助企业实现仓储管理的智能化.信息化和自动化.通过该系统,企业可以实现对仓库的进货.出货.库存等各个环节的全面把控,提高仓储管理水平,降低运营 ...
- 数据集成平台关于【源平台调度&任务生命周期】
任务调度者 调度事件 生产任务 调度任务池-异步 AsynDispatcher --source 实例化适配器执行 消费任务 实例化集成应用 DataHub Instance handleSource ...
- 记一次逆向分析解密还原Class文件
前言 前阵子我的一位朋友发来一份代码让我帮忙看看.具体就是所有的jsp文件内容和大小都一样,漏洞挖掘无从下手.经过分析发现所有的Class都使用了自定义的加密工具加密,经过逆向分析,顺利解密,因而有了 ...