SDU暑期集训排位(2)

A. Art

solved by sdcgvhgj 3min
签到


B. Biology

solved by sdcgvhgj 85min
暴力


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

题意 按照题意打印字符串

题解

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

I. Acute Triangles

solved by sdcgvhgj 270min +11
题意 求n个点构成的锐角三角形个数
做法

  • 答案为锐角个数减\(2*C_n^3\)
  • 以每个点极角排序,尺取求以每条边开始的锐角个数
  • 共线的时候夹角为0,被算进去了两次,所以对于共线的两个向量应该根据长度关系安排一个顺序
  • 解体了2个小时之后把long long改long double莫名其妙卡过了,其实是极角排序的精度问题,之前一直用atan2判大小其实是有问题的,先判象限然后叉乘才是正确姿势

J.Joining Arrays

solved by F0_0H 261min -3

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

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

posted @ 2019-07-28 18:17  FST_stay_night  阅读(245)  评论(0编辑  收藏  举报