洛谷P4428二进制 [BJOI2018] 线段树
正解:线段树
解题报告:
传送门!
话说开始看到这题的时候我想得hin简单
因为关于%3有个性质就是说一个数的各个位数之和%3=这个数%3嘛,小学基础知识?
我就想着,就直接建一棵树,只是这棵树要用个数据结构分别存下%3=0,1,2然后大力走一波就好辣
然后我仔细思考了一下,发现因为它是要连续一个区间所以我可能这个数据结构中要有9个数
前三个不变,第四个到第六个是连着左边的%3的余数,第七个到第九个是连着右边的%3的余数,依然是大力走一波
但是我jio得应该不会出这种并没有思维难度然而实现难度又很大的题目啊,,,?
于是我就又去看了下题目
发现我读错题意了:D
大概说下我错哪儿了
就是因为它是个二进制数并且可以移动嘛
我开始觉得是,因为%3的余数=各位之和%3所以不管怎么动余数都不变啊
然后我仔细一想,,,发现因为它是二进制表示所以移动是可以影响余数的TT
所以前面所有推理全部垮掉,重新想性质QAQ
不难发现如果能实现就是有偶数个1或者有奇数个1并且01数量都>=2
证明一下
因为22%3=1嘛,所以2的奇数次方都相等,2的偶数次方也都相等(显然?不解释了QwQ
那就可以算出来22k+1=2 22k=1
然后关于取模这个有个小学知识?就是和取模等于取模的和取模
那如果现在有偶数个1,就很简单,把一半放在奇数位一半放在偶数位就好了,多的0全丢前面去,显然可以
如果有奇数个1怎么搞呢,就可以额外拨出3个来放奇数位,就成为偶数的情况了
那就要求1的个数>=3并且0的个数>=2嘛(因为奇数位放了1至少要有俩偶数位把他们隔开就得是0啊QAQ
综上,我们可以推出有偶数个1或者有奇数个1并且01数量都>=2时是能实现的!
证毕
然后因为合法的情况比较多存起来转移什么的都比较麻烦
于是考虑用总数-不合法的情况就是合法的情况了嘛!
那不合法的从我们上面就可以推出来,当有奇数个1并且0的个数<2或者只有1个1的时候就会不合法
于是接下来我就不会做了
所以接下来的都是灵巧看了题解才懂的QAQ
题解有两种,第一种我jio得有点迷第二种我jio得太难了,,,
先说下解法二趴QAQ
解法二是个很神仙的东西,它牵扯到了一个神仙dp,动态dp,,,
首先我们思考如果没有修改我们怎么做
就设dp[0/1][0/1][k]表示有没有1,1的奇偶性,有几个k
然后大力转移?(*这个状态这里我还没有完全理解:D
问题在于它有修改欸,,,还有1x105组,那就显然会T飞啊QAQ
所以就要引入动态dp了,,,我没想到我居然接触动态dp这玩意儿接触得这么早?什么鬼畜东西QAQ
这里的动态dp是把dp引入到了线段树上,大概是这样子的:
因为线段树上每个节点都是表示的一个区间[l,r],对于每个节点,我们记录1个dp值
dp[0/1/2/3][0/1][0/1][0/1],下面分别解释下这几维
第一维是用来记录状态的,它分别记录了,不含左右节点,只含左节点,只含右节点,以及两个节点都包含
第二维记录1的个数的奇偶性
第三维表示是否1的数量<=1
第四维表示是否0的数量<=1
但是这样子的话,有两个问题
第一个转移转的很麻烦
第二个这样子常数很大(,,,dbq这个地方我真的不会分析,,,题解中说常数很大那就大趴,,,QAQ
那我们就可以把一棵树拆成两棵
第一棵记录dp[0/1/2/3][0/1][0/1],就去了第二维
第二棵记录dp[0/1/2/3][0/1],就有个第二维还有个第一维
因为我们可以发现当1的个数是偶数的时候我们并不care1的数量0的数量的
所以常数会小一些,而且转移相对而言比较好写
转移先咕着,,,今天会写的而且会把代码放上来的QAQ
所以谢总为什么会在线段树题目里放这么难的题目,,,我本来以为会比较简单的现在发现我离原地爆炸不远了,,,TT
洛谷P4428二进制 [BJOI2018] 线段树的更多相关文章
- 【BZOJ】1012: [JSOI2008]最大数maxnumber /【洛谷】1198(线段树)
Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插 ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
- 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)
洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...
- 洛谷P4065 [JXOI2017]颜色(线段树)
题意 题目链接 Sol 线段树板子题都做不出来,真是越来越菜了.. 根据题目描述,一个合法区间等价于在区间内的颜色没有在区间外出现过. 所以我们可以对于每个右端点,统计最长的左端点在哪里,刚开始以为这 ...
- 洛谷P5111 zhtobu3232的线段树
题意:给定线段树,上面若干个节点坏了,求能表示出多少区间. 区间能被表示出当且仅当拆出来的log个节点都是好的. 解:每个区间在最浅的节点处计算答案. 对于每个节点维护从左边过来能有多少区间,从右边过 ...
- 洛谷P3960 列队 NOIp2017 线段树/树状数组/splay
正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法, ...
- 题解——洛谷P2781 传教(线段树)
可以说是数据结构学傻了的典型案例了 昨天跳到这题上 然后思考了一下 噫!好!线段树裸题 然后打完板子,发现\( n \le 10^9 \) 显然线段树直接做不太行 然后这题又只有普及的难度 然后我就 ...
- 洛谷P4198 楼房重建(线段树)
题意 题目链接 Sol 别问我为什么发两遍 就是为了骗访问量 这个题的线段树做法,,妙的很 首先一个显然的结论:位置\(i\)能被看到当且仅当\(\frac{H_k}{k} < \frac{H_ ...
- 2018.08.16 洛谷P1471 方差(线段树)
传送门 线段树基本操作. 把那个方差的式子拆开可以发现只用维护一个区间平方和和区间和就可以完成所有操作. 同样区间修改也可以简单的操作. 代码: #include<bits/stdc++.h&g ...
随机推荐
- ASP.NET WebApi 路由配置【转】
一.路由介绍 ASP.NET Web API路由是整个API的入口.我们访问某个资源就是通过路由映射找到对应资源的URL.通过URL来获取资源的. 对于ASP.NET Web API内部实现来讲,我们 ...
- Linux shell 学习
·详细介绍Linux shell脚本基础学习(一) ·详细介绍Linux shell脚本基础学习(二) ·详细介绍Linux shell脚本基础学习(三) ·详细介绍Linux shell脚本基础学习 ...
- SharePoint 沙盒无法启动新的解决方案服务的SPUserCodeV4
开发部署时报错: 错误原因:没有启动该服务: 解决方式:打开管理中心—应用程序管理—服务应用程序--管理服务器上的服务,启动该服务即可.
- 无法在Word中打开MathType怎么办
MathType是一种数学公式编辑器,通常我们都是与Office文档配合使用,但是如果大家在Word中使用MathType编辑公式时,遇到MathType无法打开的情况,我们应该怎么办?下面我们就针对 ...
- 基于pyteseract google ocr的图形验证码识别
先灰化图片,把图片二值化,利用pytesseract包的pytesseract.image_to_string转换出文字.
- POJ 1252 Euro Efficiency(完全背包, 找零问题, 二次DP)
Description On January 1st 2002, The Netherlands, and several other European countries abandoned the ...
- 在properties.xml中定义变量,在application.xml中取值问题
如果为application.xml中的变量赋默认值,同时又在properties.xml中变量赋值,而加载后是取不到properties.xml中的值的问题. 解决这个问题需要加上黑体部分配置: & ...
- 怎样安装Linux操作系统
linux是免费的.其实这里的免费只是说linux的内核免费.在linux内核的基础上而产生了众多linux的版本.Linux的发行版说简单点就是将Linux内核与应用软件做一个打包.较知名的发行版有 ...
- Path类和File类的应用
今天是我学习C#基础的第13天,可以说马上就要结束这个基础课程,感觉学习的理论性的我不能说全部掌握了,我只想说在思路上面的语法以及用法我应该基本掌握了,感觉效果不错,不得不说,要想在一种语言上面有大的 ...
- PyQt4将窗口放在屏幕中间
以下脚本显示了将窗口放在屏幕中间位置的方法. #!/usr/bin/python # -*- coding:utf-8 -*- import sys from PyQt4 import QtGui c ...