Codeforces #471

C(分段)

题意:

分析:

  我们分别考虑p=2和p>=3的情况
  当p=2的时候,个数明显是[L,R]内完全平方数的个数

  当p>=3的时候,我们注意到这样的数字个数是1e6级别的,且a最多也不超过1e6

  我们可以对于每个a去枚举对应的p,然后丢到一个set里去重

  还有一点要注意的,p=2可能会和p>=3的情况重复,所以我们还要从set里去除所有的完全平方数

  于是对于每个询问就在我们构造出的set里二分+[l,r]内完全平方数的个数

D(扩展kmp)

题意:

  给出一个长度为n的字符串s,一个长度为m的字符串t。n>=m

  输入一个整数k,你需要从字符串s中拿出两个不重合的长度为k的子串并拼接起来形成一个长度为2k的字符串f

  请问是否存在一种取法使得t是字符串f的子串?

  n,m,k<=5e5

分析:

  我们来枚举字符串t的前缀,把这个前缀作为第一个切片的后缀,把t的对应后缀作为第二个切片的前缀,看看是否可行

  为了让两个切片不相交,我们肯定想让第一个切片尽量靠左,第二个切片尽量靠右

  我们注意到处理右边切片和处理左边切片恰好是对称的,这个我们只需要把字符串逆序再同样的做法求就行了,所以我们不妨就只讨论处理左切片

  现在问题就变成了:在原串s中寻找一个尽量靠左的长度为k的子串,这个子串的长度为i的后缀恰好是pret[i]

  我们可以用exkmp预处理求出extend[i]表示s[i..n-1]与t的最长公共前缀,那么对于每个i,本质上就是找到最小的j使得extend[j]>=i且j>k-i

  我们可以从小到大枚举i,用一个set去维护满足extend[]>=i的所有下标就行了

  时间复杂度O(nlogn)

E(去绝对值)

题意:

  给定长度为n的数组a[i],你需要自己决定一个T,1<=T<=n,那么b[i]=a[i]+|T-i|

  b[i]表示b[i]秒后位置i上空的冰锥就会掉落到底面,你就无法通过该位置了

  现在有一个人从左边位置1向右边跑,如果某一时刻,该人前面的位置中有冰锥掉下来了,并且后面的位置中也有冰锥掉了下来,那么他就被困住了。

  现在你需要定一个T,使得该人被困住的时刻尽量早。

  如果不存在这样的T,那么输出-1

  n<=1e5

分析:

  最简单的想法就是枚举所有的T,然后求出该人被困住的时刻,取个最小值就行了

  假设现在我们枚举了一个T,那么b[i]就已经确定了,我们先来看个简单的问题,就是如何判断该人是否会被困住

  被困住的话,那么就是一定会存在一个i,使得b[i]<i,我们找一个满足条件的最小的i,那么该人就在i前面被挡住了不能再跑了(但要注意一点,就是有可能后面某个冰锥很早就掉下来了,他前方其实早就被封住了)

  然后这个时候的答案还需要等他后方最早的冰锥掉落

  所以该情况下的困住时刻是max(min(b[1..i-1]),min(b[i+1..n]))

  这样还是O(n^2)的,我们得优化我们的判定

  我们把b[i]中的绝对值去掉,那么就是

  b[i]=a[i]+T-i   (i<=T)

  b[i]=a[i]+i-T   (i>T)

  我们可以考虑分类讨论两种情况下满足b[i]<i的最小的i是谁,这个东西的处理和D题的是一样的,用一个set来维护就行了

  找到这个分界点i之后,问题就是对前半部分取min,对后半部分取min

  我们注意到每次T的递增只是使得整体的一段+1,一段-1,然后我们需要求区间最小值,那么这用线段树就解决了

  时间复杂度O(nlogn)

F(dp计数)

题意:

  给出一个n点的有根树,根是1。

  dp[u][k]表示在以u为根的子树里,我们需要去寻找一个子图,它是一个满k叉树,并且这个子图的深度最大,dp[u][k]就是这样的最大深度

  我们需要对所有1<=u<=n,1<=k<=n的dp[u][k]去求和,将结果输出

  n<=3e5

分析:

  我们如果按照题目的这样去设计状态,那么状态就直接爆炸了,更不需要提转移了

  我们把问题分成k=1和k>=2,k=1的情况直接树形dp就行了

  对于k>=2的情况,我们发现所有dp[u][k]中有很多数字都是重复的且连续的,因为深度不可能会很大,最多是20

  于是我们可以反过来设计状态,dp[u][dep]表示以u为根的深度为dep的子树,最大的k值是多少(因为如果存在深度为dep的k叉树,那么一定存在深度为dep的k-1叉树)

  这样状态数就是O(nlogn)了,我们再来考虑转移

  考虑枚举dep,然后就是dp[v][dep]转移到dp[u][dep]

  很明显是我们对所有的dp[v][dep]从大到小排序,然后去找个最大的k满足a[k]>=k,这个我们直接sort暴力

  复杂度是O(nlog^2n)的

 

转载于:https://www.cnblogs.com/wmrv587/p/8687179.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Thinkpad Access Connections实现快速的在各种网络间进行切换

Thinkpad Access Connections快速的在各种网络间进行切换因为工作的原因要经常在多个无线或有线之间切换&#xff0c;每次要切换到不同的固定IP地址的网络更是一种折磨&#xff0c;换一次就要从新输入一次IP地址&#xff0c;Windows下有没有像Linux的NetworkManage那样的网络管…

15-Flutter移动电商实战-商品推荐区域制作

1、推荐商品类的编写 这个类接收一个List参数&#xff0c;就是推荐商品的列表&#xff0c;这个列表是可以左右滚动的。 /*商品推荐*/class Recommend extends StatelessWidget { final List recommendList; Recommend({Key key, this.recommendList}) : super(key: key);} 2…

gradle sync failed——Android studio 突然就无法自动下载gradle了

不知道按到了什么鬼&#xff0c;或者新安装了Android studio 无法使用 正常gradle文件位置是不需要修改的 android studio会自动配置 出现这个错误&#xff0c;就需要收到补全gradle文件路径配置即可 1、查看项目gradle版本 2、补全即可——加上后面这段对应项目里的版本的文件…

Android 串口开发——粘包解决方法,定时查询心跳数据,解析心跳数据。——持续更新中

粘包解决方法 方法1 getXOR——是校验方法 /*** 最小数据包的长度(除开数据的N个字节&#xff09;* 帧头 保留字节 协议控制字 地址字段 命令长度 命令码 命令数据 校验和* 2字节 3字节 1字节 2或8字节 2字节 2字节 0-1100字…

17-Flutter移动电商实战-首页_楼层区域的编写

1、楼层标题组件 该组件非常简单&#xff0c;只接收一个图片地址&#xff0c;然后显示即可&#xff1a; class FloorTitle extends StatelessWidget {final String picture_address;FloorTitle({this.picture_address});overrideWidget build(BuildContext context) {return …

IIS Server Farms入门

概念了解 IIS Server Farms&#xff0c;实际上应该叫“Microsoft Web Farm Framework (WFF)”&#xff0c;依赖于“Web Platform Installer”才能安装&#xff0c;依赖于WebDeploy组件。可参见 Web Farm Framework Setting up a Server Farm with the Web Farm Framework 2.0 f…

软件工程导论团队项目

软件工程导论团队项目&#xff08;速课小龙&#xff09; 一&#xff0e;团队介绍 1.团队成员 邓 旭 2016012068 &#xff08;组长&#xff09; 陈逸璇 2016012056 周紫伊 2016012043 谢月鹏 2016012066 洪泽芳 2016011988 葛金星 2016011992 2.队名&#xff1a;速课小龙 3.项…

面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

本文转载自 夏雪冬日&#xff1a;https://www.cnblogs.com/heyonggang/p/9112731.html 在实际面试过程中出现集合 Map 的概率接近 100%&#xff0c;可见不背上个 Map 相关的题目都不好意思去面试了。 如果你去面试&#xff0c;面试官不问你这个问题&#xff0c;你来找我^_^ 下…

Eclipse中将java类打成jar包形式运行

记录一次帮助小伙伴将java类打成jar包运行 1、创建java project项目 file > new > project > java project 随便起一个项目名称&#xff0c;finish 完成后项目结构如下&#xff1a; 2、植入java类 将准备好的java类&#xff0c;植入项目中&#xff0c;在 src 目录中…

工作274:ele-图标使用

/*各个路由模块的建立*/ import Home from "/views/Home/Home"; import GlobalLayout from "/layout/GlobalLayout"; import Login from "/views/login/Login"; import Check from "/views/login/Check"; const SYSTEM_MANAGEMENT &q…

串口开发,数据类型转换——字符串转 byte[],byte[]转二进制,二进制转十进制转byte[],byte[]转十进制,byte[]拼接,校验

bytez转String /*** 字节数组转换成对应的16进制表示的字符串** param src* return*/ public static String bytes2HexStr(byte[] src) {StringBuilder builder new StringBuilder();if (src null || src.length < 0) {return "";}char[] buffer new char[2];…

dataBinding和retrofit的使用

1、dataBinding使用方法 1、配置dataBinding 2、创建layout类型xml布局文件 3、即可引用 ActivityMainBinding mainBinding; mainBinding DataBindingUtil.setContentView(this, R.layout.activity_main); mainBinding.testte.setText("abcccc"); 2、retrofit的…

使多个线程循环输出0-99-0-99

直接上代码&#xff0c;后面我也有一个问题&#xff0c;关于对象的notifyAll或者notify或者single或者singleAll&#xff0c;唤醒线程是顺序唤醒吗&#xff0c;我这里都是顺序输出了 关于公平与非公平锁的问题&#xff1f;唤醒是公平的&#xff1f;&#xff1f;&#xff1f;又没…

66-Flutter移动电商实战-会员中心_编写ListTile的通用方法

1、界面分析 通过下图我们可以拆分成 4 部分&#xff0c;头部、订单标题区域、订单列表区域、ListTitle同用部分。 2、UI编写 2.1、头部 主要用到了圆形头像裁剪组件-ClipOval 顶部头像区域Widget _topHeader(){ return Container( width: ScreenUtil().setWidth(750), …

Android板实现双屏显示,DisplayManager和Display的使用

非常简单。 效果 1、创建分屏管理类 DisplayController public class DisplayController {public static Display getTargetDisplay() {DisplayManager displayManager (DisplayManager) App.getInstance().getSystemService(Context.DISPLAY_SERVICE);Display[] presentat…