首页 > 其他分享 >CF1975 记录

CF1975 记录

时间:2024-05-29 16:24:35浏览次数:14  
标签:字符 CF1975 记录 text 约束 字符串 考虑 节点

一些吐槽

考虑到我老是忘记自己做过什么题,而且这次打的实在太唐,就打算每次 vp 或者比赛完补完题写个总结,先说结论,D 分讨了一年然后胃疼去睡觉,三题遗憾离场,赛后发现状态好冲到 F or G 问题不大,寄。

A 到 C 不标注数据范围。

CF1975A

给定一个序列,问是否能在若干次切断-交换操作后使其单调递增。

简单题,但是想了五分钟,怎么回事呢?

考察一个操作可逆,思考一个递增序列操作若干次之后会怎样,不难发现肯定是先由 \(\text{ABCD}\) 变成 \(\text{CDAB}\) 这样一个一半递增另一半也递增的序列,然后继续手玩发现每次切出来都这样,所以你只要枚举判以下原序列是不是一半一半递增即可。

CF1975B

给定一个序列,问序列中是否存在两个数 \(i\) 和 \(j\) 使得每个数要么是 \(i\) 的倍数要么是 \(j\) 的倍数。

比 A 简单。考虑去重排序,最小数一定是两个数其中一个,从小到大扫看有没有冲突的,有久设成 \(j\) 然后继续比。

CF1975C

给定一个颜色序列,你每次可以选一个子数组将它所有位置的颜色全染成该子数组颜色中位数的颜色,问颜色最大是多少。

简单分讨。但是赛时想了有点久,感觉不太会猜结论。

考虑每个数是否能留到最后,如果旁边有数比它大一定可以,如果有数隔一个比它大也一定可以。其他情况似乎只能上一个小于变 -1 大于变 1 的 trick 然后线段树维护。

但是真的需要这样吗?考虑如果有其他情况还可以,那一定是 \(\text{AAACCACCA}\) 其中 \(\text{A}\) 是大于等于该数的数,\(\text{C}\) 相反,不难发现如果有出现这种情况一定有连续的 \(\text{A}\),那你完全可以不用考虑当前这个点了。

CF1975D

给定一棵数和点 \(P_A\) 和 \(P_B\),一开始所有点都是白色,\(P_A\) 走过白点会把它染成蓝色,\(P_B\) 走过蓝点会把它染成红色,每个时刻 \(P_A\) 先走,两个点都必须走一步,问最早什么时候树能变成全红。\(n \leq 2\times 10^6\) 。

现在看来简直是弱智题,当时没仔细考察性质一直在分讨,警钟长鸣。

考察 \(P_B\) 第一次走到 \(P_A\) 走过的节点之后怎么走最优,不难发现这之后最短答案就是 \(2(n-1)-maxdep\),原因在于你必须走到每个节点,且在他们相遇之前或之后,\(P_A\) 可以走到相遇点的任何一个子树(分讨在于 \(dep_{P_B}\) 的奇偶性)。

然后我们就要最小化相遇时间,虽然 \(maxdep\) 也有影响但是你为了 \(maxdep\) 延长的时间其实得失抵消或者得不偿失。

CF1975E

给定一棵树,初始所有节点都是白色,每次翻转一个节点颜色,然后问现在所有黑点是否构成链(必须是联通块)。\(n\leq 1\times 10^5\)。

赛时一直在想什么静态 toptree 上 ddp 这种东西,虽然思维难度没有,但是大分讨,感觉我是蠢货。

这个东西看着就性质很好,我们看看能不能找个充要条件直接判掉。

首先是联通块,考察一个节点怎么连在联通块,要么是块根要么连着父亲,不难发现我们只要判有多少个节点父亲没染色就行。

接着是链,先把大于三个儿子和至少两个节点两个儿子判了,然后还有个特殊情况是一条直链分叉,判以下有两个儿子的节点父亲是不是黑色就行。

CF1975F

你需要求出一个集合 \(S\subset \{0,1,2,\cdots,n-1\}\) 满足对于任意 \(T\) 都有 \(|S\cap T|\in f_T\),\(f_T\) 给出。\(n \leq 20\) 。

首先有个暴力做法:枚举所有的集合然后检查是否对所有约束都合法,这显然不太能过。

这样做的缺点在于你对两个相差不大的集合进行检查时会进行一些冗余操作(这也是大多数类似问题的突破口),于是我们考虑能不能用一些方法压缩约束快速判断。

考虑什么样的约束容易合并,由于这题里集合类似的约束其实相关性很大,我们尝试把这样的约束合并。

考察集合 \(S\) 和集合 \(S \cup v\):

  • 如果我选 \(v\),那么 \(S\cup v\) 的约束直接右移一位和 \(S\) 并上就是在剩下里面选数的约束

  • 如果我不选 \(v\),那么 \(S\cup v\) 的约束直接并上 \(S\) 就是新的。

注意这里讨论的是约束不是合法取值,所以用并,合法取值是类似的。

有了这个性质其实解法就很明了了:我们从高到底考虑是否选取当前位置上的数,然后根据选择合并约束,最后判断即可。

简单来说就是考虑合并约束然后关注只差一个元素的两个集合,找到性质分治下去。

CF1975G

给两个包含小写字母、\(\text{*}\) 和 \(\text{-}\) 的字符串,你需要把 \(\text{*}\) 换成任意可空字符串,\(\text{-}\) 换成任意小写字母,问能否使两个字符串相同。\(n \leq 2\times 10^6\) ,时限 12s。

感觉是套路题,先把开头末尾都是 \(\text{-}\) 或者字符的判了,然后剩下的两个字符串如果都有 \(\text{*}\) 那么不难发现一定合法,否则就是把没有的字符串里所有小子串放到另一个里面找匹配,这个可以 NTT 优化,但是注意每次只需匹配小子串长度的两倍,没有则可以删掉一倍长度,直接匹配开销太大。

CF1975H

给定一个字符串,你可以任意重排,定义一个字符串的权值是该字符串的最大字典序后缀,问你能达到的最小权值是多少。\(n\leq 1\times 10^6\)。

妙妙题,一个容易想到的做法是每次加字符然后转判定,但是你发现这个判定不是很能做,于是考察这个最小字符串的一些性质来直接求解。

首先,开头肯定是最大字符,我们设其为 \(m\),如果整个字符串里只有一个最大字符,那答案显然就是 \(m\) 否则答案肯定是一个 \(m\) 开头的字符串,其中洒着若干 \(m\),设其为 \(ms_1ms_2ms_3\),值得一提的是结尾肯定也是 \(m\),因为如果不是的话我们可以考虑把 \(s_3\) 放到某个 \(m\) 的前面,答案肯定变小。

由于我们只用考虑第一个 \(m\) 后面所有的字符,我们肯定会尝试先枚举用了几个 \(m\),然后考虑怎样在 \(m\) 中间插入字符使得最大后缀最小。但是这个也很难做,思考一下原因,发现其实是限制太死了,我们不能直接把答案字符串固定。

考虑弱化一些条件,比如我们不固定 \(m\) 的个数,先考虑目标字符串把 \(s_i\) 排序之后的形态,之后再把 \(s\) 换序找后缀,也即确定所有 \(s_i\)。你发现如果我们能找到其中一个最优解对应的 \(s\) 集合,那整个问题就被缩小成了一个规模更小的子问题,我们要把所有绑定完的字符串换序找最小,这好像很行。

考虑我们应该怎样确定 \(s_i\):

  • 如果最大字符的个数大于其他字符个数,那显然就是把 \(m\) 接上小字符,最后剩一些零散的 \(m\) 一起递归下去。注意如果最大字符个数很大,需要压缩操作过程。

  • 否则考虑从小到大枚举其它字符,插到 \(m\) 后面,你可能会想直接从左到右分配几遍就行,因为要保证长度尽量平均,但是有一个性质是如果有 \(mc\) 和 \(md\) 其中 \(d\) 比 \(c\) 大,那么后面的字符如果接在 \(d\) 后面会更优,这个简单分讨就能证明。

最后只要递归到平凡的情况即可。

标签:字符,CF1975,记录,text,约束,字符串,考虑,节点
From: https://www.cnblogs.com/eastcloud/p/18220540

相关文章

  • 【原创】YAML-CPP使用记录
    官方源码:https://github.com/jbeder/yaml-cpp环境:Win10,VS2019打开DeveloperPowerShellforVS2019进入yaml-cpp源码目录新建build目录并进入执行:cmake-GNinja-DCMAKE_BUILD_TYPE=Release-DYAML_BUILD_SHARED_LIBS=on..执行:ninjabuild目录生成了文件yaml-cpp.dll,......
  • esp32-s3-mini-1 otg board, uvc调试记录
    网上购买了一块ESP32-S3-USB-OTG开发板(非乐鑫官方开发板)。准备实现usbuvccamera+lcd显示。使用esp-idf/example/usb/host/uvc进行测试,修改了引脚,对USB供电和数据切换的引脚重新校正,出现报错:0x40056fc9:memcpyinROM0x4200b219:_uvc_process_payloadatC:/Users/yinsu......
  • R 语言入门学习笔记:软件安装踩坑记录——删除所有包以及彻底解决库包被安装到 C 盘用
    目录R语言入门学习笔记:软件安装踩坑记录——删除所有包以及彻底解决库包被安装到C盘用户目录下的问题,以及一些其他需要注意的点软件版本及环境遇到的问题描述问题的分析和探究最终的解决方案折中方案根治方案其他在安装过程中需要注意的问题R语言入门学习笔记:软件安装踩坑记......
  • docker问题处理记录
    1.在启动lobehub/lobe-chat:latest容器时报错:#node[1]:std::unique_ptr<longunsignedint>node::WorkerThreadsTaskRunner::DelayedTaskScheduler::Start()at../src/node_platform.cc:68#Assertionfailed:(0)==(uv_thread_create(t.get(),start_thread,th......
  • B站尚硅谷Promise学习记录
    文章目录一、Promise是什么1.Promise初体验二、Promise的好处1.指定回调函数的方式更加灵活2.可以解决回调地狱问题,支持链式调用三、Promise实例对象的两个属性四、resolve函数以及reject函数五、Promise的then方法六、Promise下的几种方法1.Promise.resolve()2.Promis......
  • 2 SAP前台操作手册-MM模块-采购管理-(标准/委外/寄售)采购信息记录创建、修改、显示、
    0总体说明SAP实施项目中,到了第3个阶段-系统实现,在这个阶段,因为蓝图汇报已经结束,配置也差不多完成了,自开发还在进行中,SAP标准功能下,可以进行基础业务的前台操作了,在实现阶段的尾端,客户指定的关键用户(俗称KU-KeyUser)会进行前台业务操作和练习,提高熟练程度,同时需要在外部SAP顾......
  • AGC061C 做题记录
    很具有启发性的题目。link我一开始没什么思路,选择了手动模拟来观察。这道题打破了我的按部就班的步骤:考虑直接创造一个条件,这样就能做到不重复。如果想到了这一点,我们其实就很容易想到这样一个条件:对于一个方案,\(\foralli\in[1,n],\(a_i,b_i)\)中没有其他人登记,那么\(i\)......
  • 单片机调试mipi接口屏幕记录
    问题1.RGB颜色不对和图片显示不正确(花屏)mipi参数的配置是否全部配置进去,此参数由屏幕厂商提供2.白光闪屏屏幕刷新率有关3.使用mipi屏幕播放视频方案选择3.1直接播放avi格式使用官方JPEG_MJPEG_VideoDecoding例程去播放视频3.2逐帧获取图片信息播放图片包括图片信息......
  • 公司如何监控到电脑端微信聊天记录的?
    在当今职场环境中,确保信息交流的安全性和合规性成为了企业管理中的重要议题。特别是在使用像微信这样的即时通讯工具进行工作沟通时,合理监控员工的电脑端微信聊天记录成为了一些企业的管理需求。但值得注意的是,此类监控必须建立在合法合规的基础上,尊重员工隐私,并确保信息的正......
  • 踩坑记录: nohup: failed to run command ‘java‘: No such file or directory
    执行一个shell脚本直接在终端可以执行但是在云效流水线上就会出现这个问题 先查看一下java-version 已经安装好了的话还是出现这个问题解决方案1:在执行Java包的前面加上这个 source/etc/profile还是不可以的话 解决方案2:先查看自己的jdk安装路径 which......