\[\mathbb{Defining~\LaTeX~macros\dots}
\newcommand{\chkmin}[0]{\overset{\min}{\gets}}
\]

0.「AGC 062C」Mex of Subset Sum

  考虑增量地寻找集合. 将 \(a\) 排序, 令 \(s\) 为其前缀和. 设 \(X_i\) 表示 \(\{a_{1..i}\}\) 不能表示出的 \(\le s_i\) 的数构成的集合. 讨论 \(a_i\) 加入时:

  若 \(s_{i-1}<a_i\), 则 \(X_{i-1}\) 的所有元素都是答案, 若答案足够则终止; 否则, 新增的元素有 \(x\in(s_{i-1},a_i)\) 以及 \(x-a_i\in X_{i-1}\).

  否则 \(s_{i-1}\ge a_i\), 则 \(X_{i-1}\) 的所有小于 \(s_{i-1}\) 的元素都是答案, 若答案足够则终止; 否则, \(X_i\) 在 \(X_{i-1}\) 的基础上可以类似地调整.

  通过两个终止条件, 我们可以保持 \(|X_i|\le ki\), 这样复杂度就是 \(\mathcal O(n^2k)\), 顶多带个 \(\log\) 的了.

1.「THUPC 2021 初赛」「洛谷 P7136」方格游戏

  好困… 才把另依托答辩卡常卡完…

  不太有意思的题, 题读对了就没啥问题了. 无障碍矩阵内两两最短路, 矩阵内到矩阵外两两最短路, 绕着矩阵边缘绕的远路都可以分横纵坐标讨论, 手撕两个求和 \(\mathcal O(1)\) 算出来. 障碍到障碍间的容斥也可以分坐标讨论, 排序后 \(\mathcal O(p)\) 算贡献. 最终 \(\mathcal O(p\log p)\) 结束.

2.「THUPC 2023 初赛」「洛谷 P9139」喵了个喵 II

  自然地考察 \(2n\) 的情况, 可以发现有解当且仅当同色对构成的 \(n\) 个区间两两不存在包含关系. 扩展到 \(4n\), 则出现位置依次为 \([p_1,p_2,p_3,p_4]\) 的颜色仅有 \((p_1,p_3),(p_2,p_4)\) 和 \((p_1,p_2),(p_3,p_4)\) 两种子颜色划分方案. 对这个建 2-SAT, 推导关系是二偏偏序, 离线后主席树优化建图即可.

3.「THUPC 2021 初赛」「洛谷 P7144」狗蛋和二五仔

  搜! 就嗯搜! 所有中间状态全部记忆化!

struct State {
char ahp, ac1, ac2, ahd; // A's hp, cards with hp=2, hp=3, cards in hand.
char hv1, hv2; // A's attacked cards.
char bhp, bc1, bc2, bhd; // B's hp, cards with hp=2, hp=3, cards in hand.
char prc, rst; // Proceeding /Dapai/, steps available.
};

(抽象派英语喵.) 就搜它就好.

  WA 点:

  • 请朗诵三遍输入格式, 我没有开玩笑.
  • 注意 "攻击" 不计入操作轮数限制.
  • 注意能否实现 "仅攻击一次, 就交换先后手" 这个行为.
  • 不建议尝试细节上的贪心, 可能成为小丑.

  TLE 点:

  • (本题中) 常数: __gnu_pbds::gp_has_table 小于 std::unordered_map 小于 std::map.
  • 就别用十万维数组了, 用上面的东西吧.
  • 尽量在哈希表里装 int, 状态在进制 hash 后可能刚好超 int, 拆出来几维开哈希表数组即可. 这个时空优化效果都很明显.
  • 如果先手全部攻击后手玩家可以击杀对方, 则直接判定, 这个剪枝没问题.

4.「山东省集 2017」「LOJ #6141」Fantasy

  不完全是正解, 不过也挺有意思. 令 \(f(s,t)\) 表示把字符串 \(s\) 转换到 \(t\) 的最小步数. 当 \(s\neq t\) 时, 考察最小的满足 \(s_x\neq t_x\) 的 \(x\), 我们必然会在某次替换中让 \(s_x=t_x\), 枚举最后一次影响到 \(s_x\) 的修改对 \((u,v)\), 设 \(s^u\) 表示将 \(s\) 的后缀替换为 \(u\) 得到的字符串, 可见这里需要满足 \(s^v[:x]=t[:x]\), 因此有

\[f(s,t)=\min_{(u,v)}\{f(s,s^u)+f(s^v[x+1:],t[x+1:])+1\}.
\]

  有环, 不过如果按照 \(|s|\) 分层, 层间是无环的, 层内转移可以写作 \(f(s,t)\chkmin f(s,s^u)+f(\cdot,\cdot)+1\). 后边的贡献是常数, 分层跑最短路就好. 复杂度怪怪, \((s,t)\to(s,s^u)\) 这个变换不太容易分析复杂度.

  正解也差不多, 首先在 \(s_1=t_1\) 时有 \(f(s,t)\chkmin f(s[2:],t[2:])\), 此外, 如果我们需要用一对 \((u,v)\) 来修 \(s_1\), 就有 \(f(s,t)\chkmin f(s,v)+f(v,t)\), 边界有 \(f(u,v)=1\). 这个本身就是最短路形式, 不需要像我的做法建抽象的图了. 跑满是 \(\mathcal O(Tn^3|s|)\), 好吓人.

5.「CEOI 2021」「洛谷 P8175」Tortoise

  设 \(d_i\) 表示从 \(i\) 出发到最近的游乐园的最短距离. 我们对 \([l,r]\) 这一段极长的不含游乐园的连续段考虑, 不妨取出 \(a_p>0\) 中 \(d_p\) 最大的 \(p\). 若兔子仅在其中卖糖果, 可以感知到贪心策略:

  1. 在 \([l,p)\) 里买糖果, 在 \(l-1\) 与购买点间横跳.
  2. 从 \(p\) 带一颗糖到 \(r+1\).
  3. 在 \([p,r]\) 里买糖果, 在 \(r+1\) 与购买点间横跳.

注意若某侧实际上没有游乐园, \(p\) 的选取会让对应侧区间为空, \(d_p\) 的值可以帮助我们正确计算答案.

  显然, 兔子不会从右侧连续段回到左侧连续段, 我们只需要依次处理这些连续段. 每次尝试取走商店里的所有糖, 再用 heap 退掉已选的代价最高的糖来让时间合法即可. 复杂度 \(\mathcal O(n\log n)\).

6. 「NOI Simu.」dl

  悄悄告诉你, 一共只有 \(\mathcal O((n+q)\sqrt n)\) 次烧树事件! 考虑所有未燃烧的连续段, 对于长度 \(<\sqrt n\) 的, 只会在 \(\mathcal O(\sqrt n)\) 的时间内产生同级的烧树事件, 对于长度 \(>\sqrt n\) 的, 任意时刻不会存在超过 \(\mathcal O(\sqrt n)\), \(q\) 次放火分析类似.

  因此, 只需要动态维护未燃烧连续段 (一种偷懒的写法是 std::set, 区间端点类型用 mutable 修饰), 用支持 \(\mathcal O(1)\) 禁用 / 恢复, \(\mathcal O(\sqrt n)\) 查修区间的分块结构维护序列即可. 复杂度 \(\mathcal O((n+q)\sqrt n)\).

7.「PA 2019」「洛谷 P5984」Podatki drogowe

  • Link & Submission.
  • 「A.分治-二分答案」「A.树论-点分治/点分树」「A.数据结构-可持久化线段树」「B.Hash」「C.Tricks」

  把上面的 tags 连词成句: 用主席树维护权值, 通过 hash 实现 \(\mathcal O(\log n)\) 比较两个路径权值和的大小, 这是广为人知的 trick, 此后只需要二分答案, 就差不多做完啦?

  先来看看如何求一个二分的权值和在所有路径中的排名. 我们可以先点分预处理出每个分治中心向外走的权值, 然后枚举分治中心, 双指针求满足 \(a+b\le x\) 的两个路径权值和 \(a,b\) 的位置, 这样就能求排名了.

  但是, 还有一个问题是, 我们该怎么二分呢? 自然不可能在 \(n^n\) 的值域空间上二分, 似乎也没有办法求出哪条路径是 "中点". 这里是一个比较新的 trick: 设答案区间是 \((L,R)\), 我们只需要实现 "在答案区间中均匀随机取出一个 (真实存在的) 路径和" 这个功能, 就能完成分治过程, 复杂度正确. 对于本题, 同上面双指针类似, 用三个指针扫描每个分治中心的序列即可. 这里没有必要排除来自同一个分治子树的路径相加, 它们不会影响路径的数量级.

  最终复杂度 \(\mathcal O(n\log^3n)\), 不能实现得太坏.

8.「2021 集训队互测」「LOJ #3661」蜘蛛爬树

  • Link & Submission.
  • 「A.树论-树链剖分」「A.数据结构-线段树」

  显然存在一种从 \(s\) 走到 \(x\), 走若干次 \(a_x\), 然后从 \(x\) 走到 \(t\) 的路径. 对于 \(s\to t\), LCA 为 \(p\) 的路径, 讨论 \(x\) 的位置:

  第一种情况, \(x\) 在 \(p\) 子树内, 如图.

此时路径长度为 \((d_s+d_t-2d_p)+2(d_x-d_y)+ka_x\).

  第二种情况, \(x\) 在 \(p\) 子树外, 如图.

此时路径长度为 \((d_s+d_t)-4d_y+2d_x+ka_x\).

  这些询问操作和 \(s,t\) 实际上没什么关系, 我们只关心 \(x,y\) 和 \(k\) 的取值. 以第一种情况为例, 我们将 \(s\) 到 \(p\) 的询问挂在若干个重链区间上, 然后对每条重链, 暴力求出以其中的结点为 \(y\), 该结点自身或轻子树为 \(x\) 时的所有一次函数贡献, 线段树维护区间凸包, 单调地进行询问即可. 对于不加限制的 "\(x\) 在 \(u\) 子树内" 的询问, 则可以通过一开始维护全局 DFN 上的区间凸包整体求解. 复杂度 \(\mathcal O((n+q)\log^2n)\).

9.「NOI Simu.」划分

  你说得对, 但是用十级算法送分是坏文明.

  设 \(i\in S\) 的方案数关于此前选择过 \(j\in T\) 的数量的 GF 为 \(A(z)\), \(B(z)\) 同理. 则新加入的一对 \((a_i,b_i)\) 是对 \(\begin{bmatrix}A(z)&B(z)\end{bmatrix}^T\) 的线性变换, 直接分治 FFT 即可, \(\mathcal O(n\log^2n)\).

10.「ARC 161A」Make M

  排序, 按照 \(1,3,\dots,n,2,4,\dots,n-1\) 放到答案里.

11.「ARC 161B」Exactly Three Bits

  不断令 \(n\gets n-1\) 直到 \(n\) 含有至少三个 bit, 取前三个即可. 迭代次数是 \(\mathcal O(1)\) 的.

12.「ARC 161C」Dyed by Majority (Odd Tree)

  尝试取一个根, 依子树归纳构造答案. 对于结点 \(u\), 若 \(u\) 的已染色儿子已经让 \(u\) 的众数无力回天, 则无解, 否则若把所有未染色儿子染成 \(u\) 需要的儿子仍然平分秋色 (这也适用于有根叶子的情况), 则对 \(u\) 的父亲染色. 这样的构造在保证子树内的解被找到的情况下, 对子树外的颜色提出了尽可能少的要求, 可以感知其正确性. \(\mathcal O(n)\).

13.「ARC 161D」Everywhere is Sparser than Whole (Construction)

  若 \(n-1<2d\) 则显然无解, 否则令结点编号为 \(0\sim n-1\), 排列成一个环. 令 \(u\) 连向 \((u+k)\bmod n~(k\in[0,d))\). 此时, 每个点的度数都为 \(2d\). 对于大小为 \(s\) 的点集, 其内部结点度数和不超过 \(2ds\), 而当 \(s<n\), 必然存在一条连向集合外的边, 因此诱导子图中所有结点度数和严格小于 \(2ds\), 则其密度严格小于 \(d\). 完成构造.


  是的, 兔告诉你了答案, 简单的二重循环, 轻松的证明. 赛时观榜, 这题通过量一直高于 C. 但是为什么这题卡了兔这么久呢?

  还是有必要回忆一下自己的思路链.

  • 这题过那么多? 编个简单点的算法?
  • 每次选出度数最小的两个未被连边的点连边?
  • 不太良定, 而且不太好写, 弃.
  • 导致非法的图是完全图? 最大的合法团是 \(K_{2d}\), 比这这个构造?
  • 尽量多连边, 先划分出若干个 \(K_{2d}\), 团之间的话, 有一些麻烦的度数限制, 例如说不能有一个团外的点连接了团内超过 \(d\) 个点.
  • 写了一车错解, 换个该死的思路?
  • 等等, 我们可以用度数描述边数, 这玩意儿看上去自由度小一点?
  • 总度数得是 \(2dn\). 我草, 让每个点的度数都是 \(2d\) 好像就一定合法了.

  兔得出的结论是: 在那 (指写代码) 之前, 要多想.

14.「ARC 161E」Not Dyed by Majority (Cubic Graph)

  连词成句: 随机生成答案, 2-SAT 检查合法性, 结束了.

  官方题解看上去是证明远难于其余部分? 溜了溜了, 抱歉 w.

15.「洛谷 P7730」蜀道难

  事情是这样的: 今天有道作业题叫 "蜀道难", 兔点开搜出来的第一道切掉之后才发现其实布置的是那道互测题.

  就, 考虑差分, 每次操作的影响都是一个数 \(-1\) 一个数 \(+1\), 对建费用流补足所有负的差分位置即可. 复杂度 \(\mathcal O(\text{Dinic}(n,nm))\).

Solution Set - “带我去看极光与大海吧”的更多相关文章

  1. 我追一个处女座的女孩快两个月了,我之前聊得很好,她说过有空call我去看电影,过了一个月她就不理我了,我喜欢她, 我是程序员,百度发不了那么多字。

    她刚刚进公司的时候,公司组织去打球,我叫她一起去她也去了,我和她聊了很多,聊得很自然,很开心,如我是哪个学习毕业的 我出来工作多久了等,她也聊了 她自己好多,她现在在读大学,只有周日上一天课那种. 我 ...

  2. Codevs 1570 去看电影

    1570 去看电影  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 农夫约翰带着他的一些奶牛去看 ...

  3. codevs——1570 去看电影

    1570 去看电影  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 农夫约翰带着他的一些奶牛去看电影.而他的 ...

  4. 带着问题看redux源码

    前言 作为前端状态管理器,这个比较跨时代的工具库redux有很多实现和思想值得我们思考.在深入源码之前,我们可以相关注下一些常见问题,这样带着问题去看实现,也能更加清晰的了解. 常见问题 大概看了下主 ...

  5. 《百面机器学习算法工程师带你去面试》高清PDF及epub+《美团机器学习实践》PDF及思维导图

    http://blog.sina.com.cn/s/blog_ecd882db0102yuek.html <百面机器学习算法工程师带你去面试>高清PDF及epub+<美团机器学习实践 ...

  6. 《奥威Power-BI案例应用:带着漫画看报告》腾讯课程开课啦

    元旦小假期过去了,不管是每天只给自己两次下床机会的你,还是唱K看电影逛街样样都嗨的你,是时候重振旗鼓,重新上路了!毕竟为了不给国家的平均工资水平拖后腿,还是要努力工作的.话说2016年已经过去了,什么 ...

  7. 擦亮自己的眼睛去看SQLServer之简单Insert(转)

    摘要:本来是打算先写SQLServer历史的,不过感觉写那部分内容比较难还需要多查些资料.于是调整了下顺序写下简单的Insert语句. 不过感觉写那部分内容比较难还需要多查些资料.于是调整了下顺序写下 ...

  8. 带着新人看java虚拟机04(多线程篇)

    我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...

  9. 带着新人看java虚拟机02

    上一节是把大概的流程给过了一遍,但是还有很多地方没有说到,后续的慢慢会涉及到,敬请期待! 这次我们说说垃圾收集器,又名gc,顾名思义,就是收集垃圾的容器,那什么是垃圾呢?在我们这里指的就是堆中那些没人 ...

  10. h5 plus/h5+规范使用,模块索引,教你如何去看h5+的手册

    最近看了下h5+规范的官网,开始觉得晦涩难懂,确实很乱,不过这也是基于我不理解的情况,终于艰难读完了,现在来分享下心得吧,基本看完文章,按我的方法,应该可以直接上手项目. 我准备的工具 hbuilde ...

随机推荐

  1. OpenCV3 图像处理笔记

    此笔记针对 Python 版本的 opencv3,c++ 版本的函数和 python 版本的函数参数几乎一样,只是矩阵格式从 ndarray 类型变成适合 c++ 的 mat 模板类型.注意,因为 p ...

  2. 【Playwright + Python】系列(九)Playwright 调用 Chrome 插件,小白也能事半功倍

    哈喽,大家好,我是六哥!今天我来给大家分享一下如何使用playwight调用chrome插件,面向对象为功能测试及零基础小白,我尽量用大白话的方式举例讲解,力求所有人都能看懂,建议大家先收藏,以免后面 ...

  3. python之执行shell命令

    python 执行shell命令,且执行完后将shell端的输出返回 subprocess import subprocess # 要执行的命令 command = "ls -lrt&quo ...

  4. 鸿蒙Navigation拦截器实现页面跳转登录鉴权方案

    我们在进行页面跳转时,很多情况下都得考虑登录状态问题,比如进入个人信息页面,下单交易页面等等.在这些场景下,通常在页面跳转前,会先判断下用户是否已经登录,若已登录,则跳转到相应的目标页面,若没有登录, ...

  5. requests发送http请求、https请求

    requests是一个python的第三方库,用来发送http请求,也可以发送https请求 发送http请求时不需要ssl证书: url="http://xxxxx.com" r ...

  6. 迁移到 Eclipse: Eclipse 对 IntelliJ IDEAA 评估开发指南

    为何考虑 Eclipse 以及它与 IntelliJ IDEA 有什么不同 Eclipse 是一个免费的.正日益流行起来的 Java 集成开发环境,最新版本的 Eclipse 中提供了很多特性,这些特 ...

  7. Java虚拟机深入研究

    文章来自:http://www.qqread.com/java/w872354600.html Java技术与Java虚拟机  说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一 ...

  8. PHP7.4之编译安装

    虽然之前写过很多编译安装PHP的文章, 但是隔段时间还是会重新安装一些PHP的版本,再次记录一下 1. 下载安装编译工具 yum groupinstall 'Development Tools' 2. ...

  9. 理解Java FutureTask

    FutureTask实现的功能 它的功能就像他继承的接口一样:Runnable与Future.他实现了一套机制将两者连接起来. Runnable主要方法是run(),用于执行一些程序. Future主 ...

  10. Helm部署SkyWalking

    一 . 部署ElasticSearch 1.下载安装包 helm repo add elastic https://helm.elastic.cohelm pull elastic/elasticse ...