摘要: C - Manhattan Subarrays 枚举 多观察数据,发现当子数组中元素个数 >= 5 时一定不满足条件,因此枚举子数组个数为 3, 4 即可 #include <iostream> #include <cstring> #include <algorithm> #include <ve 阅读全文
posted @ 2022-05-12 23:45 hzy0227 阅读(15) 评论(0) 推荐(0) 编辑
摘要: E - Boring Segments 线段树 + 双指针 题意:有一些线段,每条线段有权值,能把整个区间覆盖住的集合为好集合,求好集合中线段的最大权值 - 最小权值的最小值 首先关于线段覆盖区间的问题,可化段为点,覆盖了一个点视为覆盖了这个点和它右边的长度为 1 的段,因此覆盖了 \([l,r]\ 阅读全文
posted @ 2022-05-12 21:47 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要: D - Say No to Palindromes 枚举 可观察到只有类似 abcabcabcabc..., bacbacbac... 等 abc 三个字母都循环出现才满足要求 可记录 \(cnt[i][j][k]\),前 \(i\) 个中 \(a, b, c\) 分别在 模 \(3\) 余 \(0 阅读全文
posted @ 2022-05-12 21:21 hzy0227 阅读(24) 评论(0) 推荐(0) 编辑
摘要: D - Reverse Sort Sum 线段树 / 树状数组 从后往前遍历,如果 c[i] = i, 则说明第 i 个位置上的 1 是从时刻1到 时刻 i 都存在的,所以这一位最开始就是 1,此时若前 i 位有 k 个 1,它们一定在 [i - k + 1, i] 位置上,这个区间 - 1,这是第 阅读全文
posted @ 2022-05-12 21:08 hzy0227 阅读(23) 评论(0) 推荐(0) 编辑
摘要: C - Line Empire 贪心 每次征服一个国家之后,如果要将首都迁过来,显然之后迁不如现在迁 在征服第 i 个国家后,可利用前缀和 \(O(1)\) 算出 迁或不迁 时征服之后国家的代价,若迁的代价小就迁,否则就不迁 #include <iostream> #include <cstring 阅读全文
posted @ 2022-05-12 20:46 hzy0227 阅读(27) 评论(0) 推荐(0) 编辑
摘要: D - Optimal Partition 线段树 + dp 设 s[i] 为前缀和数组,f[i] 为考虑前 i 个数的最大答案。当枚举到第 i 个数时,有状态转移方程如下 \[ 1. \;s[i] -s[j]>0,\;即\;s[j]<s[i]\;(j<i)\\f[i]=max(f[j]+i-j)\ 阅读全文
posted @ 2022-05-12 20:43 hzy0227 阅读(13) 评论(0) 推荐(0) 编辑
摘要: E - Preorder 树形dp 若两颗满二叉树深度相同,一颗二叉树交换任意两个兄弟结点及其子树可以得到另一颗二叉树,则成这两颗二叉树同构 设 u 的左右儿子为 ls,rs 若 ls 与 rs 同构,则 \(ans_u=ans_{ls}*ans_{rs}\) 否则,ls,rs 交换又是一种新方案, 阅读全文
posted @ 2022-05-12 20:39 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要: D - Insert a Progression 绝对值 首先算出不插入时的答案 如果插入的数在 [minn, maxn] 中,则没有代价 如果 x > maxn, 则有 \((maxn,x]\) 这些数要产生代价,把他们放到最大值后面,则代价为 \(2*(x-maxn)\) 若放到开头或结尾,则代 阅读全文
posted @ 2022-05-12 20:32 hzy0227 阅读(67) 评论(0) 推荐(0) 编辑
摘要: D - Progressions Covering 线段树维护差分序列 把问题看作是每次给 b 数组的一个长度为 k 的子段减去一个等差数列,直到所有数小于等于 0 因为子段长度严格为 k,因此对于当前 b 数组中最右边的大于 0 的元素,只能让它尽量作为子段右端点 为了模拟这个过程,在子区间中减去 阅读全文
posted @ 2022-05-12 20:30 hzy0227 阅读(39) 评论(0) 推荐(0) 编辑
摘要: C - Water the Trees 二分 因为奇数天 +1, 偶数天 +2,所以找到最大的 \(h[i]\) 记为 maxn,最后的高度只能在 maxn, maxn + 1 中,因为如果答案为 maxn + 2,则可以去掉一些操作,使最大高度为 maxn 二分答案即可 #include <ios 阅读全文
posted @ 2022-05-12 20:27 hzy0227 阅读(14) 评论(0) 推荐(0) 编辑
摘要: E - Math Test 拆绝对值 要求 \(\sum\limits_{i=1}^n|r_i-x_i|\) 的最大值,可以将绝对值拆开,对于每一个 i,若 \(r_i>=x_i\), 设 \(sgn[i] = 1\). 否则设为 \(sgn[i]=-1\), \(\sum\limits_{i=1} 阅读全文
posted @ 2022-05-12 20:26 hzy0227 阅读(19) 评论(0) 推荐(0) 编辑
摘要: D - Shuffle 组合数学 记当前枚举的区间从第 i 个 1 到 第 i + k - 1 个 1,记 j = i + k - 1, 那这些 1 可以随意排列的区间为 \([pos[i-1]+1, pos[j+1]-1]\), 设为 \([l,r]\), 这个区间对答案的贡献为 \(\binom 阅读全文
posted @ 2022-05-12 20:24 hzy0227 阅读(30) 评论(0) 推荐(0) 编辑
摘要: C - Set or Decrease 一定是先对最小的元素使用 -1 操作 再从大到小把元素变为最小值 这样一定是最少操作将序列和减到 k 一下 操作数 = 操作 1 的个数 + 操作 2 的个数,操作 1 可能有很多次,操作 2 是将较大的元素变为最小值,所以可能是 [0, n - 1] 次,所 阅读全文
posted @ 2022-05-12 20:23 hzy0227 阅读(91) 评论(0) 推荐(0) 编辑
摘要: E - Star MST 给出一个 n 个顶点的完全图,边权可以从 [1, k] 中设置,求最小生成树的边权和 == 跟 1 相连的边权和的赋权方案 题意为 2 - n 号结点都与 1 号相连,这个生成树可以是最小生成树的方案数 dp 设 \(f[i][j]\) 为当前的生成树中边权最大为 \(i\ 阅读全文
posted @ 2022-05-12 20:13 hzy0227 阅读(14) 评论(0) 推荐(0) 编辑
摘要: D - Martial Arts Tournament 枚举 不能枚举 x, y ,但是可以枚举集合大小,设三个集合大小分别为 \(2^i,2^j,2^k\), 枚举 i,j 即可,复杂度为 \(O(nlognlogn)\) #include <iostream> #include <cstring 阅读全文
posted @ 2022-05-12 20:09 hzy0227 阅读(12) 评论(0) 推荐(0) 编辑
摘要: Tokitsukaze and Strange Inequality 维护二维前缀和 \(s[i][j]\) 为前 i 个数中比 j 小的有几个 枚举 b,c,分别判断 a,d 有多少种,每对 b,c 的贡献为 \(cnt_a*cnt_d\) #include <iostream> #include 阅读全文
posted @ 2022-05-12 20:05 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要: Tokitsukaze and Good 01-String (hard version) 贪心 两个一组分成 \(\frac n2\) 个 01 段 当前这一组不相同,则操作数++,并且让这一组变成和上一组一样的,段数不变 当前这一组相同,如果和上一组相同,段数不变;如果不相同,则段数++。更新 阅读全文
posted @ 2022-05-12 20:03 hzy0227 阅读(70) 评论(0) 推荐(0) 编辑
摘要: E - Messages 思维 因为每个学生最多只能读 k (1 ⇐ k ⇐ 20) 条消息,可以从这个小数据入手 结论:最多贴 20 条消息 可以算出贴 t 条消息时,贴每条消息的贡献,取最大的 t 个贡献相加, 设贡献分别为期望 \(a_i\) 个学生能读到 若已经贴了贡献最大的 20 条,再贴 阅读全文
posted @ 2022-05-12 20:00 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要: E - Crazy Robot 搜索 搜索能变成 + 的点,第一次搜到的时候入队 枚举队头的点的邻居,判断是否能变成 + ,能的话也入队(判断的方法就是如果周围的 '.' 的个数 ⇐ 1 就可以变成 + ) 关键:只让能变成 + 的入队,并且每个 + 的邻居都要判断是否能变成 + ,不能因为某个邻居 阅读全文
posted @ 2022-05-12 19:58 hzy0227 阅读(15) 评论(0) 推荐(0) 编辑
摘要: D - MEX Sequences dp 合法序列只有两种 \(f[x][0]\) :序列最大值为 x,且序列中包含 1~ x 所有数 \(f[x][1]\) :序列最大值为 x,且序列包含 [1, x-2] 所有数与 x 证明:因为当前的值 x 与 mex 的差不能超过 1,所以合法序列的 x = 阅读全文
posted @ 2022-05-12 19:55 hzy0227 阅读(68) 评论(0) 推荐(1) 编辑