ABC362E Count Arithmetic Subsequences 发表于 2024-07-14 更新于 2024-08-09 分类于 题解 本文字数: 230 阅读时长 ≈ 1 分钟 传送门 Solution 设 Fi,len,dF_{i,len, d}Fi,len,d 表示以 aia_iai 结尾,长度为 lenlenlen,公差为 ddd 的等差数列数量。转移方程为 Fi,len,d=∑j=1i−1Fj,len−1,dF_{i,len,d}=\sum\limits_{j=1}^{i-1} F_{j,len-1,d} Fi,len,d=j=1∑i−1Fj,len−1,d 阅读全文 »
CF1223F Stack Exterminable Arrays 发表于 2024-07-11 更新于 2024-08-09 分类于 题解 本文字数: 314 阅读时长 ≈ 1 分钟 传送门 Solution 从 111 到 nnn 枚举数字,对于当前数字,若与栈顶元素相同,则弹出栈顶元素,否则压入当前数字。随后将当前栈的状态通过哈希映射到 map 数组中。map 数组负责统计该状态出现的次数。 阅读全文 »
CF1982D Beauty of the mountains 发表于 2024-07-01 更新于 2024-08-09 分类于 题解 本文字数: 481 阅读时长 ≈ 2 分钟 传送门 Solution 设有雪顶和无雪顶的山的总高度差为 ccc。 通过计算代表山峰类型的 010101 矩阵的二维前缀和,可以求出每个大小为 k×kk\times kk×k 的方形区域中,两种类型的山的数量差。设每个方形的数量差分别为 aia_iai,则问题转换为方程 阅读全文 »
CF1989D Smithing Skill 发表于 2024-06-30 更新于 2024-08-09 分类于 题解 本文字数: 525 阅读时长 ≈ 2 分钟 传送门 Solution 注意到每把武器只使用一种金属锻造,可以独立计算每种金属锭的贡献。 把问题转换为:有一个数 xxx 和 nnn 个操作,每个操作包含两个参数 aia_iai、bib_ibi。当满足 x≤aix\le a_ix≤ai,则可执行操作 iii,使 xxx 变为 x−(ai−bi)x-(a_i-b_i)x−(ai−bi)。求可对 xxx 操作次数的最大值。 阅读全文 »
CF1982C Boring Day 发表于 2024-06-26 更新于 2024-08-09 分类于 题解 本文字数: 298 阅读时长 ≈ 1 分钟 传送门 Description 有大小为 nnn 的数组 aia_iai,正整数 lll、rrr。数组中相邻的多个数可绑定为一组。一个数只能在一个组内。求最多能有多少组满足组内元素之和在 [l,r][l,r][l,r] 内。 阅读全文 »
CF1986F Non-academic Problem 发表于 2024-06-24 更新于 2024-08-09 分类于 题解 本文字数: 381 阅读时长 ≈ 1 分钟 传送门 Description 一张连通无向图,你可以剪断任意一条边。求剪断后存在路径的点对数的最小值。 阅读全文 »
CF1986E Beautiful Array 发表于 2024-06-24 更新于 2024-08-09 分类于 题解 本文字数: 609 阅读时长 ≈ 2 分钟 传送门 Description 给定一个长度为 nnn 的数组 ai{a_i}ai和正整数 kkk,数组可任意排序且不占用操作次数。一次操作可将 ai=ai+ka_i=a_i+kai=ai+k。求最少多少次操作能将该数组变为回文数列,即保证 ai=an−i+1a_i=a_{n - i + 1}ai=an−i+1。 阅读全文 »
KMP 发表于 2024-06-23 分类于 笔记 本文字数: 232 阅读时长 ≈ 1 分钟 简介 对比朴素枚举,KMP 的思想是当匹配出现不一样的字符时,根据模式串当前子串的最大相同前后缀,将模式串的指针回退到最大相同前缀的末尾而非模式串的开头,从而优化时间复杂度。 记录子串最大相同前后缀长度的数组为 nextinext_inexti。下图展示了 nextinext_inexti 的求解过程。 阅读全文 »
USACO2.3 最长前缀 Longest Prefix 发表于 2024-06-23 更新于 2024-08-09 分类于 题解 本文字数: 356 阅读时长 ≈ 1 分钟 传送门 逐个对集合 PPP 中的字符串进行 KMP ,得出其在串 SSS 中的所有覆盖区间。问题转换成如何选取相互无重合部分的区间,以 SSS 串的左端点为起点,能覆盖最大的连续区域。 对区间以左端点为关键字,从小到大进行排序。定义数组 bib_ibi 记录点 iii 的左侧是否已被全部无重合地覆盖。枚举区间,若区间左端点的左边已全部覆盖,即 bl=1b_l = 1bl=1,则该区间可选取,使 br+1=1b_{r+1} = 1br+1=1。同时更新答案 ans=rans = rans=r。 阅读全文 »
Set 和 muitiset 发表于 2024-05-28 分类于 笔记 本文字数: 249 阅读时长 ≈ 1 分钟 简介 set 和 multiset 作为 C++ STL 的一部分,由红黑树实现,能保持容器内元素始终有序。其插入、查找、删除的时间复杂度均为 Θ(logn)\Theta(\log n)Θ(logn)。两者区别在于 set 不允许有重复元素,multiset 允许有重复元素。 这里顺便提起 unordered_set 和 unordered_multiset,底层实现是哈希表,容器内元素无序。插入、查找、删除的时间复杂度最好为 Θ(1)\Theta(1)Θ(1),最坏为 Θ(n)\Theta(n)Θ(n)。空间换时间。 阅读全文 »