NOIP 模拟赛 8.27
qoj17784. Same Segment
给定 \(n, m, K\),有 \(m\) 条限制,形如 \(\displaystyle \sum _{j={L_i}}^{R_i} a_j =K\),求一个非负整数序列 \(a\),满足所有限制且 \(0 \le a_i \le K\)。如果无解输出 \(-1\)。
\(1 \le m \le 2 \times 10^5, 1 \le n \le 4 \times 10^5\)。
首先发现这个问题与 \(K\) 是无关的,存在一种方案所有位置均是 \(0/K\) 之一。问题转化为“有 \(M\) 个区间,构造一个标记方案,使得每个区间恰好被一个标记覆盖”。考虑构造子问题,按 \(l\) 排序后,我们发现一个标记会支配若干连续的区间。
考虑定义 \(f_i\) 表示前 \(1 \sim i\) 个区间都满足恰好被一个标记覆盖,是否能够成功构造方案。转移考虑枚举支配区间范围 \((j, i]\),容易发现必须满足 \(\displaystyle \max _{k \le j}\{R_k\} < \min_{j < k \le i} \{R_k\}\),还必须有 \((j, i]\) 中的左端点都 \(\le (j, i]\) 中右端点最小值。
贪心地取最左边的合法标记位置,然后做 dp 就可以简单构造。
qoj12602. Master Zhu and Polygons
在一个正 \(n\) 边形中选取 \(m\) 个点(顶点有标号),要求有 \(k\) 个锐角,求方案数,对 \(10^9+7\) 取模。
\(T \le 5 \times 10^4, 3 \le n \le 10^6, 3 \le m \le 10^6, 0 \le k \le m\),\(n\) 为奇数。
ICPC 风格计数(?!💩💩?!)。正多边形问题放到圆上考虑。有经典结论:圆上一个弦,一个点如果处于该弦对应的劣弧上,那么以该点为顶点与弦上两点构成的角为钝角,反之为锐角。下令 \(h=\dfrac{n-1}{2}\)。

Case 1:\(k \ge 4\),平凡情况,由于锐角的外角显然 \(>\dfrac{\pi}{2}\),所以 \(4\) 个锐角的外角和 $>2 \pi = $ 凸多边形外角和,输出 \(0\)。
Case 2:\(k = 3\),容易发现除了三角形没有凸多边形能做到了。所以所有 \(m > 3\) 的全部为 \(0\);对于 \(m=3\),容斥一下,对于钝角三角形,容易发现所有顶点都必然在圆直径的同一侧,钦定第一个点的位置,所以答案为:
注意到这里顺便解决了 \(m=3\) 的问题。
Case 3:\(m > 3, k<3\)。
考虑“恰好”是不容易一步到位的,改为钦定 \(0/1/2\) 个锐角(分别记为 \(P_0,P_1, P_2\))。钦定 \(0\) 个就是全集 \(P_0=\dbinom{n}{3}\)。
考虑钦定 \(1\) 个锐角,先枚举一个弦在枚举一个顶点,保证它处于弦的优弧上。对于弦长相同的其实本质一样,放到一起考虑。枚举弦的两个端点在劣弧上距离 \(i\) 个单位(以 \(\frac{1}{n}\) 圆弧为 \(1\) 个单位),则优弧上共有 \(n-i-1\) 个可选顶点。劣弧上任选 \(m-3\) 个点,发现顺次连接每一个一定都是钝角(所以我们钦定与实际的区别只在于弦的两个端点的对应角)。
注意弦端点位置的枚举。那么钦定 \(1\) 个锐角的方案数是:
钦定两个锐角,首先发现 \(3\) 个锐角在这个 Case 是不可能的。所以实际上我们需要钦定其中一个角是锐角,另一个的判定标准仍然用弦的那个结论。

例如这条红边对应的圆周角就是一个锐角。考虑仍然枚举弦长 \(i\),第二层加一个枚举 \(j\)。把 \(1\) 钦定为顶点,直径对应过去应该是 \(1+\dfrac{n}{2}\)(\(1+h\) 是一个靠得最近的整数值)。

那么统计应该是简单的(枚举 \(u\) 为弦的一个端点,位于 \((1, j)\) 之间):
对于 \(\boldsymbol{\max (j-i+1, 2)}\) 的解释: 对 \(2\) 取 \(\max\) 保证弦的左端点大于 \(1\),对 \(j-i+1\) 取 \(\max\) 保证其右端点在 \(j\) 右侧。
综上我们得到了一个 \(\mathcal O(n^3)\) 的做法,可以通过上指标求和一步做到 \(\mathcal O(n^2)\)。
考虑化简,先不管前面那个 \(n\) 的系数(代换的时候小心一点 \(-i-1 \neq -(i-1)\))。
后面那个式子,可以用扰动法简单求出,前面是上指标求和。最后得到:
对于 \(P_2\):
对于恰好为 \(1/2\) 设为 \(S_{1/2}\):\(P_1=S_1+2S_2, P_2=2S_2\),所以 \(S_1=P_1-2P_2\),\(S_2 = P_2\),\(S_0=P_0-P_1+P_2\)。
注意,当 \(k=3\) 且 \(m>3\) 时特判输出 \(0\)。

浙公网安备 33010602011771号