ZROI-23NOIP十连测-Day2题解

T1

有两个正整数$a \le b < 109$,给定$a \div b$的值(精确到小数点后19位), 要求还原$a,b$

$\Large{\textbf{Sol.}}$

70分和90分是留给写线性和用double的人的

100分先写结论:

把小数写成连分数的形式:$\dfrac{1}{a_1+\dfrac{2}{a_2+ \cdots}}$,暴力枚举每一层检验是否合法

考虑一个分数会被写成什么形式

$\dfrac{a}{b} = \dfrac{1}{\lfloor b/a \rfloor+ \dfrac{b \bmod a}{a}}$

这样类似gcd的递归下去
由于两个分数的差至少是$10^{-18}$而误差只有$10^{-19}$所以不会影响取整 归纳容易证明

T3

定义一个数是好的,当且仅当能够找到三个正整数 $a,b,c$ 满足 $n=ab+ac+bc$ 且 满足 $n=xp^2$。

$\Large{\textbf{Sol.}}$

$$
n = ab+bc+ac \Longleftrightarrow n+a^2 = (a+b)(a+c)
$$

因为$a+b>a$且$a+c>a$

因此我们只需要找到某个正整数$a$,使得$n+a^2$可以分解为两个 正整数之积即可

考虑$x+1$是大于$p$的数的情况

因为 $n = xp^2$,显然我们可以让$a=p$

那么$n+a^2 = (x+1)p^2$


若$x+1$是合数(可以判掉,但没必要):存在$s,t \ge 2$,使得$st=x+1$
$\Longrightarrow sp>p,tp>p$
$\Longrightarrow \begin{cases}a = p\ b = (s-1)p\c = (t-1)p\end{cases}$


若$x+1>p$:$(x+1)>p,p^2>p$
$\Longrightarrow \begin{cases}a = p\b = x+1-p\c = p^2-p\end{cases}$


接下来再来考虑$x+1$是不大于$p$的数的情况

若$x+1 = p$,那么$n = (p-1)p^2 = p^3-p^2$

利用瞪眼法瞪出当$a = 6$的时候

$n+a^2 = p^3-p^2+36 = (p+3)(p^2-4p+12)$可以因式分解

所以我们需要使$p+3>6,b = p-3 >0$且$p$是质数,所以$p \ge 5$因此对于$p \le 3$即$n \le 18$的情况爆搜出答案(没有就是没有)

此时$p+3>6, p^2-4p+12=(p-2)^2+8>6$,所以取$\begin{cases}a = 6\b = p-3\c = p^2-4p+6\end{cases}$


若$x+1<p$,设$g = x+1$,那么$n = (g-1)p^2$

此时$\gcd(g,p)=1$

不妨设 $p = kg+r(1 \le r \le g-1)$

$\begin{aligned}n & = (g-1)(kg+r)^2 \ & = (g-1)(k^2g^2+2krg+r^2) \ & = k^2g^3+2krg^2+r^2g-k^2g^2-2krg-r^2\end{aligned}$

将$r^2$移到左边,即让$a=r$
$\Longrightarrow n+r^2 = g(k^2g^2+2krg+r^2-k^2g-2kr)$

  • $g>r$
  • $k^2g^2+2krg+r^2-k^2g-2kr = k^2g(g-1)+2kr(g-1)+r^2 > r^2 \ge r$

得到一组解为$\begin{cases}a = r\b = g-r\c = k^2g(g-1)+2kr(g-1)+r^2 - r\end{cases}$
即$\begin{cases}a = p \bmod (x+1)\b = x+1-a\c = \dfrac{xp^2+a^2}{x+1}-a\end{cases}$

T4

给定一个排列$p$.要求计算$p$的每个前缀的中位数.

$\Large{\textbf{Sol.}}$

开一个对顶堆,维护一下即可