codeforces 1030E Vasya and Good Sequences

Windows 10/11系统下TurboDesign 6.4.0完整安装指南(附序列号+破解补丁) 本文提供Windows 10/11系统下TurboDesign 6.4.0的完整安装指南,涵盖系统环境预检、安装程序部署、序列号处理及破解补丁部署等关键步骤。通过详细的安装教程和优化配置,帮助用户高效完成这款涡轮机械设计软件的安装与调试,解决常见兼容性问题。 阅读详情

题解

很容易观察到的两点是,aia_iai​有用的只有二进制表示下的1的个数,那么既然只有个数有用,如果某个区间的1的个数的和是偶数的话,会有很大可能是好序列,在验证过程中可以发现,1 1 4这种序列是不可以的,因为4*2>6,简单的说,序列总和必须要至少为其中最大的数的两倍,那么就转化为新的问题:

求一个序列中有多少连续子序列的和是偶数,并且和不小于最大值的两倍

(我的做法可能有点复杂,细节很多)
第二个限制非常难搞,但是我们注意到,新的序列bib_ibi​中,最大值大约是60多。可不可以枚举最大值?可不可以把区间按最大值分类?假设枚举出一个最大值M,序列(指新序列,下同)中某些位置是等于M的,我们要考虑的是跨越了至少一个这些位置,并且没有包含比M大的数的区间。假设b[cur]=M,枚举i>=cur作为区间右端点,(因为最多枚举60次最大值,所以这部分枚举的复杂度是O(60n),是可以接受的)我们要快速找有多少个合法左端点。
考虑怎么搞掉限制2就好了,如果右端点是jjj左端点是iii,那么是要求Sumb(j)−Sumb(i−1)>=M∗2Sum_b(j)-Sum_b(i-1)>=M*2Sumb​(j)−Sumb​(i−1)>=M∗2( * )。我们注意到题中的ai>=1a_i>=1ai​>=1也就是说bi>=1b_i>=1bi​>=1加上M最大为60,这意味着,我最多从j暴力往前找60*2=120个位置,( * )式必然能够被满足,然后就只需要考虑在此位置之前Sumb(i)Sum_b(i)Sumb​(i)有多少个和Sumb(j)Sum_b(j)Sumb​(j)奇偶性一样的就可以了。

这是大体框架,其次还需要注意不能包含比M大的数值,需要在细节上加一些处理。

代码

//QWsin
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,x,y) for(int i=x;i<=y;++i)
#define out(i,u) for(int i=first[u];i!=-1;i=next[i])
#define repvc(i,vc) for(int i=0,Sz=vc.size();i<Sz;++i)
typedef long long ll;
inline ll read()
{
	char ch=getchar();ll ret=0,f=1;
	while(ch<'0' || ch>'9') {if(ch=='-')f=-1;ch=getchar();}
	for(;ch>='0' && ch<='9';ch=getchar()) ret=ret*10+ch-'0';
	return ret*f;
}
using namespace std;

const int INF=1<<30;

const int maxn=300000+10;

int a[maxn],sum[maxn],ji[maxn],ou[maxn],t[maxn];

inline int cal(ll x)
{
	int ret=0;
	for(;x;x>>=1) ret+=x&1ll;
	return ret;	
}

inline int check(int x){return !(x&1);}
inline int s_ji(int l,int r){return ji[r]-(l==0?0:ji[l-1]);}
inline int s_ou(int l,int r){return ou[r]-(l==0?0:ou[l-1]);}

int main()
{
	int n;cin>>n;
	
	ou[0]=1;
	rep(i,1,n) {
		a[i]=cal(read()),sum[i]=sum[i-1]+a[i];
		ji[i]=(sum[i]&1)+ji[i-1];
		ou[i]=!(sum[i]&1)+ou[i-1];t[i]=a[i];
	}
	
	sort(t+1,t+n+1);
	long long ans=0;
	int k=unique(t+1,t+n+1)-t-1;
	rep(o,1,k)
	{
		int M=t[o],cur=1,pre=0;
		while(a[cur]!=M) {
			if(a[cur]>M) pre=cur;
			++cur;
		}
		while(cur<=n)
		{
			while(cur<=n&&a[cur]!=M) {
				if(a[cur]>M) pre=cur;
				++cur;
			}
			
			int j;
			for(j=cur;(a[j]<M ||j==cur)&& j<=n;++j)
			{
				int pos=cur-1;
				while(pos>=pre && sum[j]-sum[pos]<M*2) --pos;
				if(pos<pre) continue;
				
				if(sum[j]&1) ans+=s_ji(pre,pos);
				else ans+=s_ou(pre,pos);
			}
			cur=j;
		}
	}
	
	cout<<ans<<endl;
	return 0;
}

阿里云学生机2核4G,30分钟搞定DNF台服联机(CentOS 7.6保姆级教程) 本文提供阿里云学生机2核4G搭建DNF台服联机的详细教程,涵盖服务器选购、网络配置、服务端部署及客户端联机设置。通过CentOS 7.6系统优化和端口配置,30分钟内即可完成搭建,适合学生和技术爱好者低成本实现游戏联机体验。 阅读详情

相关推荐

GDSFactory环境配置实战:Python、KLayout与PDK协同指南

GDSFactory是面向光子集成电路(PIC)设计的Python参数化建模框架,其核心价值在于将版图生成从手动绘图升维为可编程、可复现、可集成CI/CD的工程实践。它依赖Python科学计算生态(如NumPy)、EDA可视化工具KLayout的深度Python绑定,以及工艺厂PDK的标准化接入,三者构成‘计算-几何-工艺’技术闭环。典型应用场景包括教学级SiEPIC PDK快速原型、工业级AIM Photonics流片准备,以及自动化DRC与光学仿真流水线构建。本文聚焦GDSFactory落地中最关键也最

weixin_30983353的博客 369

codeforces 1030E (暴力+思维)

题目网址:http://codeforces.com/problemset/problem/1030/E 题意: 给定一些数,可将区间 l ~r 中某些数的二进制位的1的位置更换, 使得最终区间所有数异或和为0,求这样的区间个数。 思路: 在那里瞎dp了好久,wa的很彻底,借鉴了一下别人的思路。 区间合法的条件是: 这个区间1的个数为偶数,并且区间中二进制位1最多的一个数的二进制个数小...

DS00HY的小博客 313

OSPF路由协议配置

构建直连连通让R1、R2、R3、R4加入OSPF,实现全网互通。掌握OSPF邻居状态的解读。掌握单区域OSPF的配置。理解OSPF的基本概念。AR3上的OSPF配置。AR4上的OSPF配置。R1上的OSPF配置。R2上的OSPF配置。

SURTR999的博客 7696

CF1030E Vasya and Good Sequences

Vasya有n个64位二进制正整数,小R有一种魔法,它可以让一个二进制数的任意两位交换,比如它可以将7(...000111)变成11(...001011)或者22(...010110),等等。对于一个序列,如果Vasya可以通过对任意多个序列中的数(可以是0个)使用任意多次(可以是0次)这种魔法,使得序列中的所有数异或和得0,则称这是一个好的序列。给定n个数a_1,a_2,a_3...a_n,问有...

weixin_33810006的博客 191

OSNet代码解析(普通卷积,分组卷积,深度可分离卷积,OSblock组成)

文章目录普通卷积和分组卷积普通卷积和深度可分离卷积用深度可分离卷积(LightConv3x3)代替普通卷积(Conv3x3)减少参数OSBlock (bottleneck)OSNet OSNet之所以轻量(2.2M)在于网络浅,使用深度可分离卷积代替传统卷积,但是很有效 普通卷积和分组卷积 所谓分组卷积,就是右图的input features分成一组一组,如上图groups=3,那么输入的特征分成3组,每组有12/3=4的通道的特征参与输出。然后根据输出通道的维度,得到每组的输入特征要计算两次(6/3=2

Mr_DaYang的博客 9802

TensorRT(C++)部署 Pytorch模型

众所周知,python训练pytorch模型得到.pt模型。但在实际项目应用中,特别是嵌入式端部署时,受限于语言、硬件算力等因素,往往需要优化部署,而tensorRT是最常用的一种方式。本文以yolov5的部署为例,说明模型部署在x86架构上的电脑端的流程。(部署在Arm架构的嵌入式端的流程类似)。

女神sha手的博客 5405

codeforces 1030E

根据题意,反正就是随便安排每个数字1的位置了,那么一段区间是good,首先要是1的个数是偶数,因为1个1消掉另一个1,然后就是要一个数的1要用另外一个1去消掉,所以最多的1不能比所有1的一半大,那么这个区间是good的。 又考虑到b[i](每个数字1的个数)是1到63的,所以以每个i为左端点,只要for循环遍历j&lt;=i+63,sum[j]-sum[i-1]%==0,2*mx&lt;=sum...

binarycopycode 431

Wio-LR1121多频段LoRa模块技术解析与应用实践

LoRa技术作为低功耗广域物联网(LPWAN)的核心通信方案,通过独特的扩频调制技术实现远距离传输与强抗干扰能力。其工作原理基于CSS(Chirp Spread Spectrum)调制,支持动态调整扩频因子(SF)和带宽(BW)来平衡传输距离与数据速率。Wio-LR1121模块作为Semtech LR1121芯片的载体,创新性地整合了sub-GHz、S-Band和2.4GHz多频段支持,配合仅1.35μA的睡眠电流,为跨境物联网部署提供了硬件基础。在智慧农业、工业监测等场景中,开发者可通过SPI接口快速集成

weixin_33742618的博客 416

E. Vasya and Good Sequences(异或)

当a2=7→11,a3=14→11且11 ⊕ 11 = 0时,对(2,3)进行配对是有效的,其中⊕表示按位异或运算。当a1=6→3,a2=7→13,a3=14→14且3 ⊕ 13 ⊕ 14 = 0时,对(1,3)进行配对是有效的。,an,Vasya想计算整数对(l,r),使得1≤l≤r≤n且序列al,al + 1,…输出 打印一个整数 - 对于1≤l≤r≤n且序列al,al + 1,…,ar很好,返回配对(l,r)的数量。在第二个示例中,配对(1,2),(2,3),(3,4)和(1,4)都是有效的。

m0_64158084的博客 547

HFSS微带线仿真从零到一:材料参数与求解设置优化指南

在射频电路设计中,微带线仿真涉及电磁场求解与传输线理论,其精度高度依赖材料参数和求解设置。相对介电常数、损耗角正切和导体电导率等参数直接影响特性阻抗与插入损耗,而求解频率、网格划分和参数扫描则决定仿真效率与收敛性。合理设置这些参数可显著提升S参数准确性,避免设计迭代。应用场景包括天线馈线、滤波器和微波互连。本文基于HFSS微带线仿真实践,系统讲解材料选择与参数优化全链路,帮助工程师快速复现可靠模型。

weixin_29192211的博客 80

CryoEM - 使用 ChimeraX 工具 操作 冷冻电镜的 MRC 密度图(Density Map) 教程

由冷冻电镜 CryoSparc 软件所生成的 Volume,需要观察其内部结构,建议使用 ChimeraX 进行操作。

AGI 4962

E. Vasya and Good Sequences

题目 题意:     给出一组序列,对于其中的元素可以任意改变其二进制下1的位置。求出区间[l,r],使得这个区间的元素在操作后异或值为0。输出这样的区间数量。     1≤n≤3⋅105,1≤ai≤10181≤n≤3⋅10^5,1≤a_i≤10^{18}1≤n≤3⋅105,1≤ai​≤1018 分析:     首先对于这种问题,一般都是枚举左区间,然后去计数右区间。     由于二进制位的数可以...

weixin_44316314的博客 304

MediaPipe 教程:从安装到应用-全网最全

MediaPipe是Google推出的开源框架,专为构建机器学习管道设计,可以高效处理视频、音频等时间序列数据。本文教程从安装到应用逐步讲解: 安装步骤简单,只需通过pip安装mediapipe包并验证版本; 重点演示人体姿态检测功能,可识别33个身体关键点; 提供基础代码实现,包括视频捕获、关键点检测与可视化; 强调模块化开发,将功能封装成类以提高代码复用性。 教程适合初学者,通过清晰指引和实用代码示例,帮助快速实现计算机视觉应用。

FJN110的博客 1563

Codeforces Contest 1030 problem E Vasya and Good Sequences——DP

Vasya has a sequence a consisting of n integers a1,a2,…,an. Vasya may pefrom the following operation: choose some number from the sequence and swap any pair of bits in its binary representation. For e...

天翼之城的博客 297

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

CodeForces 1030E Vasya and Good Sequences 位运算 思维

考虑用值域来优化算法

_int_me的博客 286

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

code forces 1030E Vasya and Good Sequences

链接: http://codeforces.com/problemset/problem/1030/E 思路: 如果区间[ L, R ] 想要满足good ,那么充分必要条件就是 1  [ L, R ] 的每一位1 的个数和是偶数,  2 [ L, R ]中的二进制1 最多的一个数的1 的个数的2倍不能超过sum 。  那么一个 longlong 的数,二进制1 最多 64 (1e18   62...

yjt9299的博客 327

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Codeforces1058 E. Vasya and Good Sequences(思维,抽屉原理暴力)

题意: 解法: 令b[i]=a[i]二进制中1的个数, 以下的所有讨论都是在b[]的基础上的. 满足条件得区间一定满足: 1.区间内1的总数是偶数. 2.区间内1的最大值*2<=区间内1的总数. 条件2比较容易遗漏, 因为当最大值>区间1总数/2时,根据抽屉原理: 不管怎么分配1的位置,最大值一个位置都至少有一个位置没有被消掉. 考虑枚举r,计算有多少个l满足条件,使得[l,r]是合法区间. 发现b[i]总是>=1的,因此当区间长度r-l+1>=61时,条件2一定成立, 此

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 213

Codeforces Round #512(Technocup 2019 Elimination Round 1) E. Vasya and Good Seque (Codeforces 1030E)

题目:Vasya and Good Sequences 思路: 由于位置可以变化,所以不需要关心具体的数是多少,只需要知道二进制表示中的1的个数是多少就可以了。 然后对于一段数,把1的个数加起来,如果是偶数,就说明异或后可以为0,否则就不能。 最后还要满足最长的数的两倍小于整个的总和。 代码: #include&lt;bits/stdc++.h&gt; using namespace std; ...

iwi 348

2018.09.23 codeforces 1053B. Vasya and Good Sequences(前缀和)

传送门 考试的时候卡了一会儿。 显然这个答案只跟二进制位为1的数量有关。 还有一个显然的结论。 对于一个区间[l,r][l,r][l,r],如果其中单个数二进制位为1的数量最大值不到区间所有数二进制位为1的数量之和的一半即maxn∗2≤summaxn*2\le summaxn∗2≤sum,并且sum是偶数那么这个区间是好的。 继续考虑,如果我们枚举左端点l和右端点r,那么当sum[r0]−sum[...

苟为蒟蒻又何妨 557

Codeforces Round #512 E - Vasya and Good Sequences 思路+dp+暴力详解

题意: 给定一段长度最大为 3e5的序列,每个数的二进制位的1和0可以互换,即二进制1的个数相同的数可以互换, 问有多少个连续的子序列(子区间),在可以使用上述互换的条件下,能够达到区间异或和为0 思路: 有前面的互换我们可以知道,对于给定的每个a[i] 我们只需要考虑其二进制位有几个1就OK了; 可是我想的是这个连续自序列必须满足“可以划分成相等的两部分”,后来想到(正解): 只要和...

床前明月光 398

[CF1030E]Vasya and Good Sequences

[CF1030E]Vasya and Good Sequences 题目大意: 给定一个长度为\(n(n\le3\times10^5)\)的数列\(a_i(1\le a_i\le10^{18})\)。可以任意对若干数进行操作,交换这个数的任意二进制位。求有多少区间,使得这个区间内的数经过操作使得异或和为\(0\)。 思路: 显然这与\(a_i\)本身的值无关,只与二进制下\(1\)的个数有关。 一...

weixin_34391445的博客 218

Codeforces Round #512 (Div. 2 E. Vasya and Good Sequences 异或问题

题目连接 题意: 给你n个数,每个数的二进制可以拆开,这个数拆开之后可以任意换0和1的位置,问有多少个l r区间 能满足异或和为0   做法:主要是看1的个数问题,由于0 1可以互换位置,那么我可以把1换成同一个位置就行,但是如果是奇数个,那么1就消不全 ,偶数个就可以消完。 那么我维护一个从尾到头的后缀和,分别记录每个数1的个数的后缀和,以及奇数后缀和,偶数后缀和。 枚举左区间时...

twh233的算法blog 288

Codeforces Round #512 (Div. 1) B. Vasya and Good Sequences

题目:http://codeforces.com/contest/1058/problem/E 粘不过来题目,自己点开看吧QAQ 题目大意:给你一列数,现在有一种操作,就是对一个数,可以任意交换其二进制的两位,操作次数不限。问你有多少个字串 [ l , r ],可以经过上述操作,使该字串的异或和为0。   题解: 一段数的异或和为0,即让这一串数二进制下每一位的1的个数都为0。于是题目可...

Niconicoqaq的博客 634

51Nod 1555 布丁怪 分治

Description 一个n * n的矩阵有n个节点,它们纵坐标和横坐标互不相同,问有多少个k*k的矩阵存在有k个元素且每行每列互不相同。 Sample Input 5 1 1 4 3 3 2 2 4 5 5 Sample Output 10 问题可以变为问一个序列中有多少个子序列里面的数编号连续。 考虑分治,维护最大值最小值,分情况讨论。 1.最大值和最小值都在右边 这时只可能会出现一种...

xgc_woker的博客 262

Codeforces 1030E 【暴力构造】

LINK 题目大意:给你n个数,你可以交换一个数的任意二进制位,问你可以选出多少区间经过操作后异或和是0 思路 充分必要条件: 区间中二进制1的个数是偶数 区间中二进制位最多的一个数的二进制个数小于等于和的一半 然后因为每个数最少会贡献1,所以直接暴力向前跳128位,再之前的就直接前缀和做掉就可以了 #include<bits/stdc++.h> using namespace...

weixin_30646505的博客 151

Educational Codeforces Round 48 (Rated for Div. 2) D. Vasya And The Matrix(构造)

描述 Now Vasya is taking an exam in mathematics. In order to get a good mark, Vasya needs to guess the matrix that the teacher has constructed! Vasya knows that the matrix consists of n rows an...

riba2534的博客 538
上一篇: Codeforces Round #507 (Div. 2) D~E
下一篇: codeforces 1070A
QWsin
博客等级 码龄11年 51粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值