D [yLOI2019] 珍珠

Description

给定一个 deque,要求支持 push_backpush_front 操作,并且查询前缀与非和以及后缀与非和。

deque中只会有 \(0\) 或 \(1\),一共有 \(n\) 次操作,其中有 \(m\) 次操作给定,剩下的操作随机。

Limitations

Solution

这是一道通过输入格式来防AK的题目

下面的做法只考虑前缀与非和,因为后缀的做法与前缀完全相同。

子任务 \(0\):

没有操作,输出四个 \(0\) 即可。期望得分 \(5~pts\)

子任务 \(1\):

暴力模拟,每次从前面插入的时候后面的元素暴力移位,暴力查询与非和即可。时间复杂度 \(O(n^2)\),期望得分 \(15~pts\)

子任务 \(2\):

考虑用线段树来维护每个区间的与非和,但是这样产生了一个问题,两个区间的与非和是无法合并的,因为与非运算没有交换律和结合律。

但是我们注意到事实上对于某个区间,序列的首部到区间左端点之前所有元素的与非和只可能是 \(0\) 或 \(1\),因此线段树每个节点维护两个信息:当该区间之前所有元素的与非和是 \(0\) 时与非上该区间的值,以及当该区间之前元素与非和是 \(1\) 时与非上该区间的值,然后即可 \(O(1)\) 转移。

时间复杂度 \(O(n \log n)\),期望得分 \(15 ~pts\)

子任务 \(3\):

插入的元素全部是 \(1\)。

考虑一堆连续 \(1\) 的前缀与非和序列,一定形如 \(101010101\dots\)

证明上,考虑第一个位置一定是 \(1\),然后 \(1~\text{nand}~1~=~0\) ,\(0~\text{nand}~1~=~1\),因此序列中 \(0\) 和 \(1\) 一定是循环出现的。

因此一个询问的答案一定是 \(y~\&~1\)。时间复杂度 \(O(n)\),期望得分 \(10~pts\)

子任务 \(4\):

插入的元素全部是 \(0\)。

考虑一堆 \(0\) 的前缀与非和序列,一定形如 \(011111111111 \dots\)

用与子任务 \(3\) 类似的办法即可解决。时间复杂度 \(O(n)\),期望得分 \(10~pts\)

子任务 \(5\):

考虑一个显而易见的事实,\(0\) 与非任何数都得 \(1\)。

因此考虑一次查询如果与非和的最后一项是 \(0\),则直接返回 \(1\) 即可。

同时对于最后一项是 \(1\) 的操作,只需要看这一项向前一共有连续的几个 \(1\),由于前面那一项是 \(0\),所以一段 \(011111\) 的序列的与非和一定是 \(1010101010\dots\),而与 \(0\) 前面的项完全无关。

当然需要特判查询的 \(0\) 是序列第一个元素,以及查询的 \(1\) 前面没有 \(0\) 的情况。

那么问题就变成了对于每个位置维护它前面第一个 \(0\) 的位置。

由于 \(m = 0\) ,序列中的元素是完全随机的,因此连续 \(0/1\) 段的长度期望都是常数级的,因此暴力找即可,期望时间复杂度 \(O(n)\),期望得分 \(15~pts\)

子任务 \(6\):

考虑在序列不随机时怎么对每个数维护它前面第一个 \(0\) 的位置。

事实上,在每插入一个 \(0\) 时,都暴力修改这个 \(0\) 的有元素的一侧的连续 \(1\) 的信息即可。

例如,在序列左侧插入一个 \(0\),则暴力修改 \(0\) 右侧连续 \(1\) 的左侧最近的 \(0\) 的位置为该位置即可。在序列右侧插入同理。

考虑时间复杂度:每个为 \(1\) 的元素都只会在左侧最近和右侧最近的 \(0\) 插入的时候被修改信息,因此每个元素都只会被修改 \(O(1)\) 次信息,即每次均摊修改 \(O(1)\) 个信息,总的修改次数为 \(O(n)\),因此总时间复杂度 \(O(n)\),期望得分 \(30~pts\)。

appreciation

感谢@Burnside 神仙帮助进行题解的校对工作

【神奇性质】【P5523】D [yLOI2019] 珍珠的更多相关文章

  1. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  2. 一些Fibonacci数列的神奇性质【数学】

    递推式: \(f_i=1 (1\leq i\leq 2)\) \(f_i=f_{i-1}+f_{i-2}(i>2)\) 一些性质 \(\sum_{i=1}^n f_i=f_{n+2}-1\) \ ...

  3. LCT专题练习

    [bzoj2049]洞穴勘测 http://www.cnblogs.com/Sdchr/p/6188628.html 小结 (1)LCT可以方便维护树的连通性,但是图的连通性的维护貌似很麻烦. [bz ...

  4. 【ContestHunter】【弱省胡策】【Round3】(C)

    容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...

  5. 第八届郑州轻工业学院ACM(程序设计大赛)校内预选赛

    郑州轻工业学院有一个大赛,把几个有趣的题目分享一下.下面是题目连接,喜欢了就点点... 斗破苍穹 礼上往来 统计人数 神の数 炉石传说 Mathematics and Geometry 马拉松后记 斗 ...

  6. bzoj4817 [Sdoi2017]树点涂色

    Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...

  7. 海量数据挖掘MMDS week3:社交网络之社区检测:高级技巧

    http://blog.csdn.net/pipisorry/article/details/49052255 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  8. 高斯消元(Gauss消元)

    众所周知,高斯消元可以用来求n元一次方程组的,主要思想就是把一个n*(n+1)的矩阵的对角线消成1,除了第n+1列(用来存放b的)的其他全部元素消成0,是不是听起来有点不可思议??! NO NO NO ...

  9. JXOI2018简要题解

    JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...

随机推荐

  1. 通过JS下载 or 唤起App

    判断唤起app的连接是否在WeChat中打开 let isWeiXin = navigator.userAgent.toLowerCase().indexOf('micromessenger') != ...

  2. c++小学期大作业攻略(三)用户系统

    Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...

  3. [Leetcode] 5279. Subtract the Product and Sum of Digits of an Integer

    class Solution { public int subtractProductAndSum(int n) { int productResult = 1; int sumResult = 0; ...

  4. 我是如何一步步编码完成万仓网ERP系统的(八)产品库设计 4.品牌类别

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  5. vue chunk-elementUI.3d5a4739.js 过大,网页打开慢开启gzip压缩

    如下 upstream sems { server weight= fail_timeout=; } server { listen ; server_name www.serve.com; loca ...

  6. 前后端分离项目Vue+drf开发部署总结

    思维导图xmind文件:https://files-cdn.cnblogs.com/files/benjieming/%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A ...

  7. apktool 反编译 回编译

    下载apktool 安装好Java环境 拷贝apk 拷贝game.apk到当前文件夹.apk随便指定 反编译 反编译完成.生成game目录 game目录内容 回编译 回编译完成.生成build和dis ...

  8. Android Scrollview嵌套下listView动态加载数据,解决onScrollChanged执行多次数据重复问题

    这一篇博客和上一篇讲的都是listView的动态加载,但有所不同的是,本篇的listView是嵌套在ScrollView下的,有时候在一个Activity中可能分为好几个模块,由于展示的需要(手机屏幕 ...

  9. JVM参数最佳实践:元空间的初始大小和最大大小

    本文阅读时间大约4分钟. JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Meta ...

  10. ORM之EF初识

    之前有写过ef的codefirst,今天来更进一步认识EF! 一:EF的初步认识 ORM(Object Relational Mapping):对象关系映射,其实就是一种对数据访问的封装.主要实现流程 ...