正睿提高组2017模拟题三T1

听了很久又看了很久别人的程序才听懂,于是乎记录一下防止以后忘记。

好啦,假设当前

l-1=5,r=7;那如果学习过树状数组的话就知道题目中的操作如果转换为二进制的话

对于l-1来说他的二进制是101,所以会被加上-1的位置是101和100,r的二进制是111,所以会被加上1的位置是111,110,100

所以可以发现最后更新的位置是l-1的二进制的1的个数+r的二进制的1的个数-2*l-1和r都会更新的位置。

而l-1和r减1都会更新的位置的个数是它们两个二进制的最长公共前缀的1的个数(当然,前提是两个二进制的长度相等,要不然更新的位置不可能相同)

那先从简单的开始讨论,我们假设当前的n=1000000(64)

位数i:6 5  4 3 2 1 0

数字:1  0  0 0 0 0 0

方法一:

我们来讨论当前在第i位数字如果是1的话在多少组l-1和r中这个位置是会被更新的(不会抵消),假设i=4

比如说0110000这个数字中的第四位数和0~n这几个数字中的哪些数字是不起冲突可以更新答案的,很明显位数与它不同的肯定不会有矛盾,和它前缀不同的也不可能有矛盾

所以只有0110000~0111111这几个数会和0110000抵消也就是2^4个数,所以这个数能贡献的就是总共的n+1个数减去2^4,好同理而论,在讨论第i位的时候与0110000这个数类似的数总共有2(也就是当第四位的前缀为00~01,总共两种可能)*(2^4)(后面是0000~1111),再乘上之前的(n+1-2^4)就是这位数能为答案贡献的大小。

但是还有另外一种情况,假设n=101111,还是讨论第4位数,你会发现除了上面提到的,还有101000~101111这些数是有可能对答案贡献的,假设这样的数有x个,与上面相同

总贡献就是x*(n+1-x)。所以我们在算每一个数的时候如果当前的这位数为1那么还要再额外多计算一项。

额复杂度基本上就是n的二进制的位数了吧。。。所以跑的飞快。。。

方法二:

哈,数位dp的方法等下再写。。。

时间: 2024-08-30 01:37:47

正睿提高组2017模拟题三T1的相关文章

正睿提高组2017模拟题二T2

不会线性的,但是群里有个大神,发现用可以用80分的复杂度写出100分的效果,于是.... 考虑每次加入一条边,我们用f[x][j]表示加入第i条边后,当前的并查集x中,第j个点的父亲.那么如何加呢?假设当前第i条边的两端点为u和v,如果第x个并查集中u和v联通那么很明显,它不可以再加到这个并查集中(每个并查集维护的就是一个极大森林),然后就往后找,直到能找到一个x使得其中u和v是不连通的为止(肯定能找到,因为如果已有的都已经连通,说明前x个极大森林中都无法删去这条边,所以再构建一个新的并查集就好

2017.11.25【NOIP提高组】模拟赛A组

2017.11.25[NOIP提高组]模拟赛A组 T1 3467. [NOIP2013模拟联考7]最长上升子序列(lis) T2 3468. [NOIP2013模拟联考7]OSU!(osu) T3 3472. [NOIP2013模拟联考8]匹配(match) T1 有转移方程f[i]=max{f[j]}+1,a[j]<a[i] 可以用线段树+离散化维护这个方程,因为涉及以往状态可以用主席树维护 打太丑爆空间了 Code 1 #include<cstdio> 2 #include<c

2017.12.02【NOIP提高组】模拟赛A组

2017.12.02[NOIP提高组]模拟赛A组 T1 3555[GDKOI2014模拟]树的直径 T2 3542[清华集训2014]冒泡排序 T3 3486[NOIP2013模拟联考10]道路改建(rebuild) T1 树直径的一个性质,两棵树合并,形成新的树的直径的两个端点为原树中的四个端点之二. 可以用反证法证明.用此性质本题就变成了lca裸题了 Code #include<cstdio> #include<cstring> #include<cmath> #i

2017.12.09【NOIP提高组】模拟赛A组

2017.12.09[NOIP提高组]模拟赛A组 T1 3489. [NOIP2013模拟联考11]数列的GCD(gcd) T2 3500.[NOIP2013模拟联考15]物语(monogatari) T3 3501.[NOIP2013模拟联考15]消息传递(news) 吐槽:这次的题好像有点水啊,但最简单的第二题都给打挂啦!!(数组开小了) T1 本套题中最难的题.考虑dp 设f[i]是b[1],b[2]...b[N]的最大公约数的数目,g[i]是b[1],b[2]...b[N]的公约数的数目

9.22 正睿提高4

目录 2018.9.22 正睿提高5 A 数组计数(DP) B 旅行(思路) C 进化(思路 二进制拆分) 考试代码 B C 2018.9.22 正睿提高5 时间:3.5h 期望得分:100+80+30 实际得分:100+80+30 比赛链接 T2一直以为类似某道虚树题(SDOI2015)..到最后只想写暴力(写了暴力也该想到了啊 但是已经在划水了). A 数组计数(DP) 题目链接 DP.前缀和优化一下就行了. 刚开始滚动数组又少清空了mmp.. #include <cstdio> #inc

2017.07.11【NOIP提高组】模拟赛B组

Summary 今天的比赛打得还不错,第一题被同桌灌输的贪心,纯模拟洗脑了,然后steal的看了一下,发现怎么也对不了,一直在检查.最后10分钟才找出反例,推出动态规划方程,没有想到怎么转移,比赛就结束了.第二题题意理解错误了,但是还是拿到了充满希望的10分,第三题看到题目就直接上了线段树,我想没几个人能像我一样5分钟想完并打完这道题了.贪心一定要看到反例,不能盲目去做,否则浪费了时间,更让心情愈来愈不甘. Problem T1 解题 题目大意 奶牛有P (P≤300) 道题目要做.他们的月薪是

2017.07.10【NOIP提高组】模拟赛B组

Summary 今天题目总体不是难,但是分数很低,只有100+10+30,其中第二题还是以前做过的,第一题设计数论,而且以前做过同一个类型的题目,比赛推了很长时间.第三题时以前做过的原题,是贪心没学好啊!方法也不够周到,数据看得不仔细. Problem T1 可见点数 题目大意 我更改了一下,但是求的东西是一样的.已知有n*n个人在一个n*n网络的格点上,有个人在(1,1)的位置,问他能看到多少个人的脸,不包括自己. 想法 已知一个定理,说得笼统一点,(x,y)和(x+a,y+b)点连一条边,其

2017.08.06【NOIP提高组】模拟赛B组

Summary 今天的比赛60+100+100=260分,没有想到第一题正解是搜索,我与AC差一段距离,这段距离,叫倒着搜.总的来说不是很难. Problem T1 天平 题目大意 给你N个排序好的砝码的质量,从第三个砝码开始,它的重量最少是前两个砝码的质量之和.天平容不得超过C质量的质量.问最大的质量可以是多少. 想法 一般Usaco的题目都不会水到哪里去,但是今天的... 有两种方法. (1) 爆搜+剪枝 爆搜应该都会,参数是枚举到第K个,当前砝码是重S 优化一:如果当前的砝码质量加上没有抉

2017.08.05【NOIP提高组】模拟赛B组

Summary 这次比赛打得非常差,第一题我以为是个难题,于是推了一下就没再去想了,然而考场上一堆人AC.第二题状态设错了,导致结果有后效性.结束后pascal卡常卡了36次.第三题别人n²就过了,我还加多了棵茁壮的线段树上去. Problem T1 袁绍的刁难 题目大意 第i个数的数是3i-1,让你求,组合出来的数