首页 > 其他分享 >AT_abc290_d 总结

AT_abc290_d 总结

时间:2023-05-31 19:22:40浏览次数:45  
标签:总结 cnt le 贡献 times 枚举 abc290

题目:AT_abc290_d

链接:洛谷AT逐月

题意

  • \(f(x)\) 为序列 \(x\) 最少需要改变的字符数量使得 \(x\) 为回文串。给定长度为 \(n\) 的序列 \(a\),求所有子段的 \(f(x)\) 之和。

  • 数据范围:$ 1 \le a_i \le n \le 10^5$。

思路

\(n^2\) 暴力

我们可以对于每一对数 \((a_i, a_j)(1 \le i < j \le n)\) 求它对答案的贡献,若 \(a_i \ne a_j\),贡献为 \(\min(i, n - j + 1)\),否则贡献为 \(0\)。

正解1

  • 上述做法显然这样是过不了此题的,我们不能枚举每一对数。我们发现如果 \(a_i = a_j\) 才有贡献会好做许多。

  • 对于我们每个数值 \(x\),用 vector 记录所有 \(a_i = i\) 的 \(i\),然后可以枚举每个数值 \(x\),在枚举元素 \(p_{x, i}\),那么 \((p_{x, i}, p_{x, j})(i < j)\) 的贡献为 \(\min(p_{x, i}, n - p_{x, j} + 1)\)。那么会有一个分界线,一边是 \(p_{x, i} \le n - p_{x, j} + 1\),另一边则是 \(p_{x, i} > n - p_{x, j} + 1\)。左边所有贡献全是 \(p_{x, i}\),右边则是 \(n - p_{x, j} + 1\)。

  • 所以只需要二分或双指针这个分界线,左边全部贡献用个数 $ \times p_{x, i}$,右边用一个后缀和即可,再用所有的对数减去相等的即是答案。

正解2

  • 上面是用全部减去相同的,相当于是容斥,但是也可以直接做。我们每次将关于当前区间 \([l, r]\) 的 \(l, r\) 再 \([l, r]\) 的贡献全算完,然后就可以删掉这两个数了,因为后面的计算已经和它们没有关系了。

  • 但是怎么计算贡献呢?令 \(cnt_i\) 表示 \(i\) 出现的次数。那么 \(l, r\) 的贡献为 \((cnt_{a_l} - 1) \times l + (cnt_{a_r} - 1) \times l - (a_l \ne a_r) \times l\)。为什么乘 \(l\) 呢,因为 \([l, r]\) 内的数要与 \(l, r\) 组成一对那么贡献就是 \(l\) 或 \(n - r + 1\)。

时间复杂度

双指针:\(O(n)\)。

标签:总结,cnt,le,贡献,times,枚举,abc290
From: https://www.cnblogs.com/xhr0817-blog/p/17447106.html

相关文章

  • Docker 常用命令简单总结
    1、安装docker1.1、安装docker:sudoapt-getinstall-ydocker.io1.2、启动docker服务:systemctlstartdocker1.3、设置开机启动:systemctlenabledocker1.4、查看docker版本:docker--version1.5、查看Dockercpu/内存占用状态:dockerstats--help1.6、查看Docker状态:systemctlsta......
  • kkFileView漏洞总结(转)
     发布时间2023-05-0422:18:52作者:渗透测试中心0x00kkFileview存在任意文件读取漏洞漏洞描述KekingKkFileview是中国凯京科技(Keking)公司的一个Spring-Boot打造文件文档在线预览项目。KekingkkFileview存在安全漏洞,该漏洞源于存在通过目录遍历漏洞读取任意文件,可能导......
  • 【随手买】团队博客总结
    设想和目标1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?我们的软件主要做的是车载随手买,我们之前有录制视频进行分析,有较为清晰地描述。2.是否有充足的时间来做计划?只有十天工程时间,计划时间是比较短的。再加上我们团队只有两个人,团队......
  • 算法总结——堆栈、字符串、数组类题目
    先说stack的题目stack的实现:链表,数组题目:(1)简单的:minstack,一个数组实现三个stack(2)经典的stack问题:经典汉诺塔问题,逆波兰式计算或者产生逆波兰式,简化文件路径,验证括号对是否合法,找出最长有效括号(贪心+stack求解)(3)涉及tree的遍历问题:tree中序遍历的迭代解法,二叉搜索树的两节点和(twosu......
  • JS监听dom高度变化方法总结
    前沿:有时候我们需要监听dom的变化,比如获取父元素的高度,动态的设置子元素的高度,所以需要监听dom的高度变化,才能准确获取dom的高度,那么有哪些监听dom高度变化的方法呢?今天简单列举一下。1、MutationObserver构造函数MutationObserverAPI用来监视DOM变动。DOM的任何变动,......
  • golang实现设计模式之抽象工厂模式总结-代码、优缺点、适用场景
    抽象工厂模式也是一种创建型的设计模式,其是在工厂模式的基础上实现更高程度的内聚。我们知道在工厂模式中,一种产品类就需要新建个对应的工厂类生成产品的实例,这会有什么问题呢?虽然工厂模式解决了简单工厂模式不好扩展的问题,实现了OCP,但一种产品就需要新建一个工厂类,比如有10000种......
  • linux命令小总结 本人本阶段学习的linux命令。
    ifconfig查看IP地址reboot重启ls查看命令  ls--help查看ls的帮助  ls-l查看详细列表  ls-a查看当前文件或者文件夹,包括隐藏文件和文件夹。  ls-la组合命令查看所有列表的文件夹和所有隐藏文件  ls/etc指定查看当前某一个目录里面的文件或者文件夹  ......
  • vue事件基本使用总结
    vue事件的基本使用:1、使用v-on:xxx或@xxx绑定事件,其中xxx是事件名2、事件的回调需要配置咋methods对象中,最终会挂载在vue实例对象上3、methods中配置的函数,不要用箭头函数,否则this就不会只想vue实例了4、methods中配置的函数,都是被Vue所管理的函数,this指向的是vue实例或组件实......
  • 实现memcpy()函数过程总结
    1.按字节实现1)初步版本void*my_memcpy(void*dst,constvoid*src,intn){if(dst==NULL&&src==NULL&&n<=0)returnNULL;char*s=(char*)src;char*d=(char*)dst;while(n--){*d++=*s++;}returnd......
  • When Cyber Security Meets Machine Learning 机器学习 安全分析 对于安全领域的总结
    链接:http://ucys.ugr.es/jnic2016/docs/MachineLearning_LiorRokachJNIC2016.pdf https://people.eecs.berkeley.edu/~adj/publications/paper-files/SecML-MLJ2010.pdf一些关键点:算了,不总结了。......