😅

https://qoj.ac/problem/11547

由 dilworth 定理我们知道一个数列的最长上升子序列等于最小下降序列覆盖。

设原排列的最长上升子序列长度为 \(L\),首先有 \(L+k-n>\frac{k+1}2\) 时无解,因为任意长度为 \(k\) 的子序列至少会与原排列的最长上升子序列重叠 \(\frac {k+1}2\) 个元素。

否则我们断言一定有解。具体地,将原排列划分为 \(L\) 个下降序列,记为 \(D_1,D_2,...,D_L\),按照长度从大到小排序,然后一个一个选,假设最后一个选的数来自 \(D_m\),如果每个序列都选了超过 \(2\) 个数直接对了,否则相当于后面若干个 \(|D|\) 全是 \(1\),设最后 \(m\) 个序列长度全是 \(1\),这样我们会有后 \(n-k\) 个没选,选了 \(L-(n-k)\) 个,由上面这是小于等于 \(\frac {k+1}2\) 的。

https://qoj.ac/problem/11549

对于 \(2\le p\le 53\),我们选取 \(\frac{1}{p},\frac {1}{2p}, ...,\frac{1}{64p}\)\(7\) 个数,可以凑出来所有 \(\frac {a_p}{64p}\),其中 \(0\le a_p<128\),于是先把 \(x\) 乘个 \(64\),相当于要求 \(\sum \frac{a_p}p=64x\)

\(D=2\times 3\times ... \times 53\)\(D>10^{18}\)

然后有引理:对于 \(x<D\)\(\sum_{a_p}p\) 能凑出 \(c+\frac {x}D\),原因大概是你把两边乘 \(D\) 然后考虑模 \(D\) 意义下,相当于 \(\sum\limits_i a_i (\frac Di)\equiv x\pmod D\),然后这个和 CRT 形式一样,拆成每个同余式上,相当于 \(\sum\limits_i a_i (\frac Di)\equiv x\pmod p\),然后也就是要求 \(a_p\frac Dp \equiv x \pmod p\),然后这里是能解出来一个 \(<p\)\(a_p\) 的,然后这个就是 \(a_p\) 在模 \(D\) 意义下的解。由于一共只有 \(16\) 的分数,所以最终会有一个 \(<16\)\(c\)

注意到 \(a_2\) 可以更大一些,也就是说可以通过让 \(a_i\)\(2\) 使得 \(c\)\(1\),于是最后一定能凑成 \(16+\frac {x}D\),而对于原来的目标 \(X\),只需要求解一个 \(x\) 使得 \(16+\frac{x}{D}\equiv X\pmod P\),然后用上述方法求解 \(a\) 即可。

这样只会用不超过 \(7\times 16=112\) 个数,满足限制。

posted @ 2025-09-28 14:16  Nine_Suns  阅读(6)  评论(0)    收藏  举报