当前位置: 首页 > news >正文

ICPC/XCPC 做题记录

[SNCPC2019] Unrooted Trie

发现不满足题意的情况就是一个节点到多个子节点的边的字母相同,那么合法当且仅当每个节点到子节点的字母互不相同。那么可以统计每个节点连接的字母数量,并运用类似换根 dp 的思路,快速更新这个数量并实时维护符合条件的点的数量即可。时间复杂度 \(O(26n)\)

Submission

[GDCPC 2023] Base Station Construction

考虑 dp。设 \(f_i\) 表示到位置 \(i\) 所需的最小花费,且第 \(i\) 个位置必选,现在要找上一个决策点 \(j\),这个点应该要在此前所有区间的左端点的后面,才能保证这些区间能被覆盖(即确保至少一个在之前每个区间内),则 \(j\) 应满足 \(\max_{r_k<i}l_k \le j < i\),转移方程 \(f_i=\min_{{\max_{r_k<i}l_k} \le j < i}f_j+a_i\)。左边部分将区间按右端点排序后双指针即可,转移使用单调队列即可。

实现时可以令 \(a_{n+1}=0\),这样 \(f_{n+1}\) 可以直接作为答案输出。时间复杂度 \(O(\sum(n+m\log m))\)

Submission

[HBCPC2024] Points on the Number Axis A

答案即为 \(\dfrac{\sum_{i=1}^n x_i}{n}\)。以下有两种证明。

证一

由对称性可知每个点被选的概率是一样的,即每个点对答案贡献的权重 \(p_i\) 是一样的。又由于 \(\sum_{i=1}^n p_i=1\),故 \(p_i=\frac{1}{n}\),那么答案即为 \(x\) 的平均数。

证二

数学归纳法。设 \(f(n,x)\) 表示长度为 \(n\) 的序列 \(x\) 对应的答案。

  • \(n=1\),则 \(f(n,x)=\dfrac{\sum_{i=1}^n x_i}{n}\) 显然成立。
  • 假设 \(n=k,k\ge 1\) 时结论成立,则 \(n=k+1\) 时,有 \(f(k+1,x)=\dfrac{1}{k+1}(\sum_{i=1}^{k+1} \dfrac{f(k,x-x_i)+x_i}{2})=\dfrac{1}{k+1}(\sum_{i=1}^{k+1} \dfrac{\frac{(\sum_{j=1}^{k+1}x_j) -x_i}{k}+x_i}{2})=\dfrac{1}{k+1}(\sum_{i=1}^{k+1} \dfrac{(\sum_{j=1}^{k+1}x_j)+(k-1)x_i}{2k})=\dfrac{1}{k+1}(\sum_{i=1}^{k+1} \dfrac{(k+1+k-1)x_i}{2k})=\dfrac{\sum_{i=1}^{k+1} x_i}{k+1}\)\(n=k+1\) 时也成立。
  • 综上,结论成立。

[SNCPC2019] To the Park

考虑从大到小枚举不超过 \(\lfloor \frac{n}{2} \rfloor\) 的质数 \(p\)(因为质数越大越难匹配),并统计其有多少个倍数尚未匹配(包括自身)。如果个数为奇数,那么把 \(2\times p\) 用来留给偶数匹配。如果个数为偶数,直接两两配对即可。这样能够保证含较大质数因子的数也尽可能匹配,实现答案最大化。时间复杂度 \(O(\sum(n\log \log n ))\)(与埃氏筛相同)。

Submission

[SNCPC2019] Escape Plan

正难则反。考虑以 \(k\) 个逃生点为起点,\(1\) 为终点跑最短路,那么就很容易可以得到每个点的前若干小的最短路,最坏情况下显然是将这些堵住,那么取到第一个没被堵住的最短路时再向其它点扩展即可。每个点依旧只会向外扩展一次,因此时间复杂度依旧是 \(O(m\log m)\)

Submission

[SEERC 2019] Cycle String?

首先如果每个字母出现次数最多不超过 \(n\) 次显然可以让相同的字符放在一起。这样做每个子串一定互不相同(字母完全相同的最多出现一次),因此一定有解。

否则,设出现次数最多的字母为 \(ch\),则可以先放 \(n\)\(ch\),然后放一个其它字母,再放剩下的 \(ch\),最后把剩下的字母按上面的规则放即可。这样做能保证 \(ch\) 不会出现超过 \(n\) 的连续段。无解的情况:

  • 只有 \(2\) 种字母,且另一种字母出现不超过 \(2\) 次,则最多构成 \(aa\cdots aba\cdots ab\) 的形式,存在两个 \(aba\cdots a\),无解。
  • 不止 \(2\) 种字母,但其它字母出现次数总和少于 \(2\) 次,则无法将 \(ch\) 分割成 \(2\) 段,无解。

Submission

[GDCPC 2023] Traveling in Cells

显然可达的位置一定是一段连续的区间,那么对于操作 \(2\) 直接使用树状数组维护单点加区间和即可。对于颜色的维护,可以沿用可持久化线段树的思路,在其发生改变(或初始时)建立从该颜色的根到叶子的路径(如果已经有了就直接在上面修改),这样就省去了对每一种颜色建整棵树的大量空间。分别二分左右边界,然后查询区间内每种询问的颜色的出现次数之和(线段树区间和)是否等于区间长度即可。时间复杂度 \(O(n\log^2 n)\),空间复杂度 \(O((n+q)\log n)\)

Submission

[NERC 2018] Easy Chess

由于题目保证有解并且只需要找到一组解,因此可以直接爆搜,记录经过的点并判断是否到达终点即可。枚举时先枚举上下移动,再枚举左右移动,可以尽快到达终点,优化复杂度。

Submission

[CERC2019] ABB

转化题意后发现就是要找最长的回文后缀。那么可以直接求出两个方向的哈希,然后枚举对称点即可。亦可以使用 KMP,将 \(s\) 反转为 \(s'\),构造新字符串 \(s'+一个特殊字符+s\),根据回文串的特性可知只需找新串的 border 即可。两种时间复杂度均为 \(O(n)\)

Submission

http://www.wxhsa.cn/company.asp?id=1670

相关文章:

  • LG9648
  • LG5689
  • 近五年 CSP NOIP 补题记录
  • CF2111C
  • 唐人日记
  • CF2111B
  • ABC394F
  • LG11793
  • ABC394G
  • MX 炼石 2026 NOIP #5
  • 0126_状态模式(State)
  • Visual Studio 2026 预览体验版现已发布,一起来看看带来哪些新功能!
  • 基于RK3568/RK3576/RK3588/全志H3/飞腾芯片/国产UOS等/国标GB28181监控系统
  • Go语言读写锁(RWMutex)底层原理详解
  • 【GitHub每日速递】无需提示词!Nano Bananary香蕉超市:AI绘画玩法多到停不下来
  • 小题狂练 (J)
  • Drift数据库开发实战:类型安全的SQLite解决方案
  • DELPHI FireDAC连接EXCEL文件
  • 读人形机器人09教育行业
  • PHP判断字符串是否包含中文
  • 当我们红尘作伴,活得潇潇洒洒
  • 诡异的mysql8的问题
  • 二叉树理论
  • 支付中心的熔断降级要怎么做
  • 协议版iM蓝号检测,批量筛选iMessages数据,无痕检测是否开启iMessage服务
  • 栈和队列总结
  • 工业互联网认知实训台-一句话介绍
  • 湾区杯 SilentMiner WP
  • Python-课后题题目-1.1编程世界初探
  • Python-课后题题目-1.2初识python语言