hdu2019多校5

2019 Multi-University Training Contest 5

Problem A fraction

题意

给定一个质数 $p$ 和一个小于 $p$ 的正整数 $x$,求出最小的正整数 $b$ 使得存在至少一个正整数 $a$ 满足$a < b$ 且 $a\equiv bx(\bmod p)$

$1\leq T \leq 2\times 10^5$

$1 < x < p$

$3\leq p \leq 10^{15},p\in \mathbb{P}$

保证有解。

题解

先把 $a\equiv bx(\bmod p) (a < b )$ 换成 $a=bx-py(y>0)$的形式。

根据题意可得 $0<a=bx-py<b$

即:$py<bx,b(x-1)<py$

由 $x>1$,$y>0$,可得: $\frac{p}{x}<\frac{b}{y}<\frac{p}{x-1}$

$p,x,x-1$ 都已知,转换成 $\frac{a}{b}<\frac{x}{y}<\frac{c}{d}$ 且 $x$ 最小的问题。

当 $\frac{a}{b}$ 与 $\frac{c}{d}$ 间存在整数时,取 $y=1$ 会使得 $x$ 的最小值最小。

当不存在整数时,考虑减小范围。

不等式两边同时减去 $z$ 得:

$\frac{a-bz}{b}<\frac{x-yz}{y}<\frac{c-dz}{d}$

$z$ 的最值为 $\left \lceil \frac{a}{b} \right \rceil-1$

不等式取倒数得:

$\frac{d}{c-dz}<\frac{y}{x-yz}<\frac{b}{a-bz}$

变成更小的子问题。

正确性:递归处理同时保证 $y$ 最小的同时 $x-yz$ 最小,而 $x=(x-yz)+yz$,因此能保证 $x$ 最小。

时间复杂度为ex_gcd的时间,即 $O(\log p)$

Problem B three arrays

题意

有两个长度为 $n$ 的数组 $a,b$,任意排列 $a$ 和 $b$ 后,记 $c_i=a_i\bigoplus b_i$

求字典序最小的 $c$。

$n\leq 10^5$,$a_i,b_i< 2^{30}$

题解

一道不错的题。

首先是异或,可以想到应该是跟 01trie 有关的东西。

那么对 $a,b$ 上的数分别建一个01trie。

然后两个序列上的数字看成点, 存在有向边 $(a_i,b_j)$ 当且仅当 $j$ 为使得 $a_i\bigoplus b_j$ 最小的 $j$,$(b_i,a_j)$ 同理。这样就得到了一个有向的二分图之类的东西。

若序列中的数两两不同,且同时存在 $(a_i,b_j)$ 和 $(b_j,a_i)$ 两条边,那么显然答案中一定会出现 $a_i$ 和 $b_j$ 配对的情况。因为如果不出现,交换位置一定会更优。

那么配对了以后可以在原来的序列中删去,变成了一个子问题。

如果序列中有相同的数,把这些数合并到一起就好了。

继续深挖性质。

发现不会出现长度大于 $2$ 的环。

一条边 $(x,y)$ 的意义在于 $x$ 最偏向 $y$,那么如果出现了 $(d_1,d_2),(d_2,d_3)$ 这两条边的话就说明 $d_1\bigoplus d_2 > d_2\bigoplus d_3$,如果此时连成了环 $(d_1,d_2,\cdots,d_m)$ 的话,就会有 $d_1\bigoplus d_2>d_2\bigoplus d_3>\cdots>d_{m-1}\bigoplus d_m>d_m\bigoplus d_1>d_1\bigoplus d_2$

矛盾,因此不可能出现。

那么可以dfs,用栈维护当前这条链是什么,当出现了一个长度2的环就尽量配对。当栈顶配对完了就弹出。

时间复杂度 $O(n(\log w+\log n))$,其中 $w$ 为 $a,b$ 中元素的最大值。

Problem D equation

题意

两个长度为 $n$ 的序列 $a,b$ 和整数 $C$

求下列方程所有的解,以分数形式输出。

$$\sum_{i=1}^n|xa_i+b_i|=C$$

$n\leq10^5,1\leq a_i,|b_i|\leq 10^3,C\leq 10^9$

题解

一次函数之和为一次函数,而 $|xa_i+b_i|$ 为一条折线,相当于两个一次函数。

$n$ 条这样的折线相加后,斜率和截距最多只会在 $n$ 个点处发生变化。

因此 $n$ 条折线相加后相当于 $n+1$ 个一次函数。

在每个一次函数的范围内判断一下就可以了。

Problem E permutation1

dfs模板题,签到题

Problem F string matching

扩展kmp模板题,签到题

Problem G permutation2

递推模板题,签到题