SDU暑期集训排位(2)


C - Computer Science

solved by rdc 16min

题意 数轴上有一些点,求极短长度 x,使得存在 \(n\) 个区间,第 \(i\) 个区间包含 \(a_i\),包含的点数至少 \(k\) 个。

做法

  • 每个区间相互独立。
  • 对点排序。
  • \(x_{i+k-1} - x_i + 1\) 区间更新 \([x_i,x_{i+k-1}]\)

D. Drama

solved by rdc 183min -1

题意 题目说了半天告诉了我们这是一个先升后降柱状图,升最多升一格,否则解体。

做法

  • 先识破高度是 \(O(\sqrt{n})\) 级别的。
  • 对列做 DP,前缀后缀分开考虑。
  • \(f[i][j]\) 表示用 \(i\) 个格子最后一列高度为 \(j\) 且相邻两格高度差小于等于 1 方案数。
  • \(g[i][j]\) 表示用 \(i\) 个格子最后一列高度为 \(j\) 方案数。\(g\) 需要用前缀和优化。
  • 复杂度 \(O(n\sqrt{n})\)


F.Small Numbers

solved by F0_0H 28min

题意 给两个数a,b,支持两种操作,(1)同时除公因子 (2)一个除,一个乘。要求操作完a,b和最小

题解 对a,b进行素数分解,对于每个数量为奇数的素因子,暴力枚举分给a或b即可


G.New Keyboard

solved by F0_0H 158min -2

题意 按照题意打印字符串

扫描二维码关注公众号,回复: 6887606 查看本文章

题解

  • dp[i][j][0|1] 表示当前处理到第i个字符,且在第j个机器上,且上一次操作是打印或者换机器的最优解
  • 直接转移会GG,但我们可以跑最短路,每个状态最多两条边判断打印还是跳转。
  • dij加个log,复杂度有点炸,但还能苟过去

J.Joining Arrays

solved by F0_0H 261min -3

题意 给两个序列,分别选出一个子序列,并拼成一个长度为K的序列,要求字典序最小
题解 暴力加贪心

  • 暴力枚举第一个序列选t个,那么第二个序列选k-t个
  • 暴力从a序列里选出长度为t且字典序最小的子序列,b同理
  • 考虑合并两个子序列,归并
  • 1)队首元素不相等,直接选
  • 2)队首元素相等,这个比较凉,但可以通过二分加序列哈希的方式判断出下一个不相等的位置,再贪心选即可
  • 用合并后的序列更新答案

猜你喜欢

转载自www.cnblogs.com/FST-stay-night/p/11260299.html