Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequen
题目大意
给出nnn个数a1,a2,⋯,ana_1,a_2,\cdots,a_na1,a2,⋯,an,每个数在二进制下,可以任意交换0和1的位置(也可以不交换),问有多少个区间[l,r][l,r][l,r]满足在每个数在操作之后的异或和为0。
时间限制
2s
数据范围
n≤3×105n\le 3\times 10^5n≤3×105
ai≤1018a_i\le 10^{18}ai≤1018
题解
不难发现,只需要关心这个数在二进制下1的个数,而不要具体关注这个数是什么。
那么考虑一下满足条件的区间中1的个数,
显然1的个数一定是偶数,不然1无法两两匹配在异或的时候消去。
除了这个条件,还有没有别的条件,
显然是有的,来看这种情况:
两个相邻的数,一个数有31个1,另一个数只有1个1,它们的和是偶数,但是它们并不满足条件。
因此多了一个条件,这个区间其它数1的个数的和要比的最多1的那个数要大。
不难发现,这个最大值只有60,对于这部分情况可以之间枚举,其余的情况通过前缀和计算。
Code
//#pragma GCC optimize (2)
//#pragma G++ optimize (2)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#define ll long long
#define G getchar
using namespace std;ll read()
{char ch;for(ch = G();(ch < '0' || ch > '9') && ch != '-';ch = G());ll n = 0 , w;if (ch == '-'){w = -1;ch = G();} else w = 1;for(;'0' <= ch && ch <= '9';ch = G())n = (n<<1)+(n<<3)+ch-48;return n * w;
}void write(int x)
{if (x > 9){write(x / 10);putchar(x % 10 + 48);}else putchar(x + 48);
}const int N = 300005;int n , s[N] , num[N][3] , tmp , mx , a[N];
ll ans , x , z[63];int main()
{//freopen("d.in","r",stdin);//freopen("e.out","w",stdout);z[0] = 1;for (int i = 1 ; i < 63 ; i++)z[i] = z[i - 1] << 1;n = read();num[0][0] = 1;memset(a , 0 , sizeof(a));for (int i = 1 ; i <= n ; i++){x = read();for (int j = 0 ; z[j] <= x ; j++)if (z[j] & x) a[i]++;s[i] = (s[i - 1] + a[i]) % 2;num[i][0] = num[i - 1][0];num[i][1] = num[i - 1][1];num[i][s[i]]++;mx = tmp = a[i];for (int j = i - 1 ; j ; j--){if (tmp > 120){ans = ans + num[j - 1][s[i]];break;}tmp = tmp + a[j];mx = max(mx , a[j]);if (tmp >= mx * 2 && tmp % 2 == 0) ans++;}}printf("%lld\n", ans);return 0;
}
Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequen相关推荐
- Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...
传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...
- szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告
A. Math Problem 题目大意:就是给你n个线段,你自己再添加一个线段d使得d和所有的线段都有交点,求d这个线段的最小长度是多少 解题思路: 1.首先看d线段的左端点,就是左端点选取的是所有 ...
- Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
一场挺简单的CF,但是我打炸了啊 A. Search for Pretty Integers time limit per test 1 second memory limit per test 25 ...
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造
传送门 文章目录 题意: 思路: 题意: 给nnn个数,让你构造一个尽可能大的矩阵,其中每个点所在的行和列都不含相等元素. 思路: 假设构造的答案矩阵大小为a×ba×ba×b且a<=ba< ...
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维
传送门 文章目录 题意: 思路: 题意: 给一张图,求必须经过aaa点和bbb点的路径条数. 思路: 通过观察我们发现,这个路径无非就是x−>a−>b−>yx->a->b ...
- Codeforces Round #759 (Div. 2, based on Technocup 2022 Elimination Round 3)
感觉E思路明确只用了stl+树状数组,F线段树复合修改,为什么都是2400. A. Life of a Flower B. Array Eversion C. Minimize Distance E. ...
- Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) 题解
文章目录 A. Prison Break B. Restore Modulo C. Basic Diplomacy D. Playlist E. Skyline Photo F. Useful Edg ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)【A、B、C题】
A. Contest for Robots 签到题,注意特判即可. #include <bits/stdc++.h> using namespace std; const int N=11 ...
- Codeforces Round #709 (Div. 1, based on Technocup 2021 Final Round) A. Basic Diplomacy
传送门 文章目录 题意: 思路: 题意: 有nnn个小朋友,让后你要在mmm天中每天都选择一个小朋友,给出这mmm天都可以选哪个小朋友,每个小朋友选的次数不超过⌈m2⌉\left \lceil \fr ...
- Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)
A. Windblume Ode 题意是给你一个数组.然后要你求得一个子序列,这个子序列每个数的和是一个合数,并且是该数组能得到的最大的合数.输出这个子序列中每个元素的下标. 一开始看到这个题目的n的 ...
最新文章
- linux--memcache的安装和使用(转)
- 2007年下半年 网络工程师 上下午试卷【附带答案】
- windows操作系统_如何正确使用windows操作系统?
- Python中将三个列表数据zip起来并遍历(Iterating through three lists in parallel)
- Nginx-09:Nginx原理
- Java《剑指Offer》面试题2:替换空格
- java agent_GitHub - dingjs/javaagent: 基于javaagent开发的APM工具,收集方法的执行次数和执行时间,定时输出成json格式的日志。...
- jQuery中this与$(this)的区别总结
- job.php打不开,cronjob上的PHP错误,在提示时工作正常
- python 相关性检验怎么计算p值_生信工具 | 相关性热图还能玩出什么花样?
- DRBD+Corosync+Pacemaker+MySQL(下)
- 更改MAC终端显示的主机名
- Oralce UTL_SMTP发送邮件的发送时间处理
- Android 实现扫一扫功能
- VirtualBox
- Android 2020年最新保活方案 保活90% 已适配8.0 ,9.0, 10.0(酷狗音乐)
- 怎样黑进Microsoft:循序渐进指南 (转)
- 制作卡通(动漫风)效果
- 通过过滤器Filter来完成url访问权限限制
- trunk接口(华为)新手必看
热门文章
- 如何自己制作CHM电子书?
- 【YOLOV5-5.x 源码解读】plots.py
- 图像的二阶导数为何对噪声尤为敏感-----图像二阶导数的本质
- php如何做防抖,Vue中怎么对事件进行防抖和节流操作?
- 360抢票 网站维护中 你的登录被踢了!
- linux解压rar.gz,Linux tar.gz 、zip、rar 解压 压缩命令
- c盘瘦身。清理四个垃圾文件夹
- gmail邮件分组_如何使用Gmail和G Suite设置专业电子邮件地址
- 查看github的IP地址
- cf Educational Codeforces Round 47 E. Intercity Travelling