首页 > 其他分享 >P7568 「MCOI-05」追杀

P7568 「MCOI-05」追杀

时间:2023-09-05 20:44:42浏览次数:43  
标签:MCOI 暴力 05 复杂度 对于 攻击者 操作 我们 P7568

原题

首先这题比较重要的一点是要往暴力去想,因为我们发现\(m\)的值很小,而且这个操作是没有合并性的,即不能通过是否存在某个操作来判断全部成员的生存情况

我们先考虑一个比较暴力的做法,暴力枚举对于每个点\(u\)如果在\(t\)时刻死亡会影响哪些操作,对于操作我们暂时先暴力的\(O(n)\)枚举,容易发现这个复杂度是\(O(n^2m)\),貌似比暴力还要差


我们考虑怎么优化,对于某一个\(u\)点若最终会死亡,则必然存在血量\(=1\)和\(=0\)的情况(废话),我设\(u\)点血量\(=1\)的时间为\([l_i,r_i]\),我们发现如果在范围\([1,l_i]\)内我们对\(u\)点进行攻击,则显然\(t=r_i\);而如果我们在\([l_i,r_i]\)的范围内进行攻击,则\(t\)就是他的攻击时间,对于所有以\(x\)作为攻击者的所有操作时间位于区间\([t,r_i]\)不会被记为贡献

这么做看起来貌似没有优化做法,但我们发现对于所有以\(x\)作为攻击者的所有操作时间位于区间\([t,r_i]\)中所有有用的操作最多只有\(3m\)个,因为一个人血量最多\(3\)条,所以我们可以把复杂度优化到\(O(nm^2)\),复杂度和暴力同级


我们发现对于每一个点\(u\),当\(t \in [l_i,r_i]\)时,我们会重复计算\([t,r_i],[t-1,r_i],[t-2,r_i]...\)的情况,于是我们对于每一个攻击者\(u\),按时间倒序考虑所有情况,每次把某一个操作在之间的基础上操作,之前的操作要保存信息,可以做到复杂度\(O(m^3)\)


我们发现枚举\(u\)点是不是很好优化掉的,暴力递推同理,于是我们考虑怎么尽量少的暴力递推。我们发现如果钦定某一次操作\((x,y)\)失效,换言之在这次操作前让\(x\)死亡,那我们只需要影响这一个操作即可暴力递推,只需要在遇到这次操作后把\(x\)的生命值改成\(0\)即可(这里是我一开始不理解正解的原因),这样我们对于每一个有效的操作,把这个操作去掉后暴力记录答案,最终乘上\(DreamXD\)选择的方案即可

最终复杂度\(O(nm)\),因为有效的操作个数只有\(O(m)\)个

标签:MCOI,暴力,05,复杂度,对于,攻击者,操作,我们,P7568
From: https://www.cnblogs.com/fox-konata/p/17680738.html

相关文章

  • 23.09.05内网盲区记录
    1、用户组的安全标识符这些数字代表Windows操作系统中不同用户或用户组的安全标识符(SID),每个SID都与一个特定的用户或用户组相关联。具体来说,这些数字对应的用户或用户组如下:1000+:普通用户。这是指没有特殊权限或角色的普通用户账户。500:管理员。这是指具有完全控制计算机和用......
  • 接下来做的一些事20230905
    上一篇后缀自动机。数论。凸包。卷积。平衡树。圆方树。会尝试像\(6\)月的某段时间一样对自己做的每道题写一句话题解,以及评分。分数等级分为easy,easy+,medium,hard,hard+。每一档的意思为:easy自己能轻松做出来easy+自己花了一定功夫才能做出来medium会有些步骤......
  • C/C++地铁线路查询系统[2023-09-05]
    C/C++地铁线路查询系统[2023-09-05]地铁线路查询问题描述:当一个用户从甲地到乙地时,由于不同需求,就有不同的交通路线,有人希望以最短距离到达,有人希望用最少的换乘次数等。请编写一北京地铁线路查询系统,通过输入起始站、终点站,为用户提供两种或以上决策的交通咨询。设计要求:......
  • C/C++《程序设计(上机)》选题[2023-09-05]
    C/C++《程序设计(上机)》选题[2023-09-05]2023-2024-1《程序设计(上机)》授课计划开发工具:TurboC/Visualstudio等等具体要求:用上述系统平台和开发工具完成所分配题目的程序,并撰写报告。一、课程任务概述本课程是学生在学习了C或C++等编程语言之后进行的一次实践性学习,通过......
  • Oracle报 ORA-00054资源正忙的解决办法
    只需三步:第一步:selectsession_idfromv$locked_object;第二步:SELECTsid,serial#,username,osuserFROMv$sessionwheresid=967;第三步:ALTERSYSTEMKILLSESSION'967,59523';其他问题:1.查询数据库中的锁select*fromv$lock;select*fromv$lockwhereblock=1;2......
  • 【230905-5】用Canvas上勾画对数曲线:y=log10_x
    【图像】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>勾画log10_x</title><styletype="text/css"......
  • 2023-09-05:请用go语言编写。一个图像有n个像素点,存储在一个长度为n的数组arr里, 每个像
    2023-09-05:请用go语言编写。一个图像有n个像素点,存储在一个长度为n的数组arr里,每个像素点的取值范围[0,s]的整数,请你给图像每个像素点值加上一个整数k(可以是负数),像素值会自动截取到[0,s]范围,当像素值<0,会更改为0,当新像素值>s,会更改为s,这样就可以得到新的arr,想让所有像素点的......
  • 20230522 java.time.Instant
    介绍java.time.Instant类声明@jdk.internal.ValueBasedpublicfinalclassInstantimplementsTemporal,TemporalAdjuster,Comparable<Instant>,Serializable时间线上的一个瞬时点,可以理解成时刻被称为“新纪元”的时间线原点被设置为穿过伦敦格林威治皇家天文台的......
  • 20230528 java.beans.BeanDescriptor
    介绍java.beans.BeanDescriptorpublicclassBeanDescriptorextendsFeatureDescriptorAPI构造器BeanDescriptor(Class<?>beanClass)BeanDescriptor(Class<?>beanClass,Class<?>customizerClass)publicgetBeanClassgetCustomizerClass......
  • 20230523 java.time.Duration
    介绍java.time.Duration类声明@jdk.internal.ValueBasedpublicfinalclassDurationimplementsTemporalAmount,Comparable<Duration>,Serializable两个时刻之间的时间量两个Instant之间的时长是Duration在内部,秒数存储在一个long中(seconds),而纳秒数存......