codeforces|CF1054D Changing Array
因为数据范围是2e5级别的,所以我们考虑用异或前缀和来处理区间的异或情况。(比如说a包括b,那么我们通过异或可以知道b对于a的补区间的信息)
之后因为对任意\(a_i\)进行取反操作,会改变它和它之后的区间值(原来相等的都不相等了,原来不相等的都相等了),所以结果是我们对原先的前缀和直接取反,就可以表示对它进行取反操作之后的前缀和了。
因为不管怎么取反操作,一个位置的前缀和只有两种,那么我们显然就可以预处理出所有的值了。
然后我们可以把相同类别的放在一个map里面。(注意要避免重复,比如说010和101是一类)
之后把ans值\((==n*(n+1)/2)\)减去重复的就可以了。
因为是要求区间异或和不为0,那么转化下来的条件就是前缀和选取的两个不相等即可。
我们要求最大的个数,那么就是同一类的最好均分,用组合数算就行了。(比如说有5个010的话,分成2个010和3个101就行了)
最后注意一下要先给0类加一。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define MAXN 200010
using namespace std;
long long ans;
int pre[MAXN];
map<int,int>m;
int n,k,x;
int main() {
scanf("%d%d",&n,&k);
m[0]++;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
pre[i]=pre[i-1]^x;
pre[i]=min(pre[i],pre[i]^((1<<k)-1));
m[pre[i]]++;
}
ans=(long long)(n+1)*n/2;
for (map<int,int>::iterator it=m.begin();it!=m.end();it++)
{
long long x=it->second;
ans-=(long long)((x/2)-1)*(x/2)/2;
ans-=(long long)((x-x/2)-1)*(x-x/2)/2;
}
printf("%lld\n",ans);
}
codeforces|CF1054D Changing Array的更多相关文章
- Codeforces 1054D Changing Array 贪心+异或和
题意 给一个长度为\(n\)的位数为\(k\)的整数数列\(a\),一次操作可将任意\(a_i\)取反,问经过任意次操作后最多有多少个区间异或和不为\(0\) 分析 求出前缀异或和,区间异或和为\(0 ...
- Codeforces 482B Interesting Array(线段树)
题目链接:Codeforces 482B Interesting Array 题目大意:给定一个长度为N的数组,如今有M个限制,每一个限制有l,r,q,表示从a[l]~a[r]取且后的数一定为q,问是 ...
- Codeforces 1077C Good Array 坑 C
Codeforces 1077C Good Array https://vjudge.net/problem/CodeForces-1077C 题目: Let's call an array good ...
- codeforces 482B. Interesting Array【线段树区间更新】
题目:codeforces 482B. Interesting Array 题意:给你一个值n和m中操作,每种操作就是三个数 l ,r,val. 就是区间l---r上的与的值为val,最后问你原来的数 ...
- codeforces 407C Curious Array
codeforces 407C Curious Array UPD: 我觉得这个做法比较好理解啊 参考题解:https://www.cnblogs.com/ChopsticksAN/p/4908377 ...
- codeforces 797 E. Array Queries【dp,暴力】
题目链接:codeforces 797 E. Array Queries 题意:给你一个长度为n的数组a,和q个询问,每次询问为(p,k),相应的把p转换为p+a[p]+k,直到p > n为 ...
- [题解]Mail.Ru Cup 2018 Round 1 - D. Changing Array
[题目] D. Changing Array [描述] 给n个整数a[1],...,a[n],满足0<=a[i]<=2^k-1.Vanya可以对这n个数中任一多个数进行操作,即将x变为x' ...
- 【CodeForces 624D】Array GCD
题 You are given array ai of length n. You may consecutively apply two operations to this array: remo ...
- codeforces 86D : Powerful array
Description An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary su ...
随机推荐
- Mysql 源码编译安装 ( 5.5 、5.6 共存 )
简介: 如何在一台服务器同时运行两 ( 多 ) 个 MySQL 服务. 1.MySQL 5.6 shell > useradd -r -s /sbin/nologin mysql shell & ...
- Django中的DRF框架视图集使用
1. 两个基类 1)APIView Django REST_framework 中所有视图的基类是APIView 父类是View 支持定义的属性: authentication_classes 列 ...
- 并发编程和MySQL总结
1️⃣ 并发编程主要内容: 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号.事件.join.GIL.进程间通信.管道.队列. 生产者消费者模型.异步模型.IO多路复用模型.sele ...
- Camera & Render
1.void Render(); Description Render the camera manually. This will render the camera. It will use th ...
- Navicat修改查询保存路径
mysql使用navicat查询时有时候会有很多sql语句, ctrl+s时自动保存在C:\Users\Administrator\Documents\Navicat\MySQL\servers\lo ...
- sudo问题汇总
1. 注释Defaults requiretty Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端. 否则会出现sudo: sorry, y ...
- Linux的kickstart安装详解
Linux的kickstart安装详解 一.什么是kickstart? kickstart安装是redhat开创的按照你设计好的方式全自动安装系统的方式.安装方式可以分为光盘.硬盘.和网络.此文将以网 ...
- servicestack.redis工具类
using System;using System.Collections.Generic;using System.Linq;using ServiceStack.Redis;using Servi ...
- js闭包原理与例子[转]
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.闭包原理: 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域 ...
- Insufficient free space for journal files
前两天请假了,公司的很多app突然挂掉了,说是mongodb莫名的挂掉了,赶紧进去看了看日志: --31T14:: [initandlisten] ERROR: Insufficient free s ...