Codeforces #765D

我在这道题上花了2个小时,仍没解出。理一下当时的思路,看看症结到底在哪里。

题意

用 $[n]$ 表示集合 ${1,2,3,dots, n}$ 。
3个函数
$f colon [n] o [n]$
$g colon [n] o [m]$
$h colon [m] o [n]$
满足下列两个性质

  1. $forall x in [m], g(h(x)) = x$
  2. $forall x in [n], h(g(x)) = f(x)$

给出 $f$ ,求 $g, h$ 。如有多解,任给一组。

分析

由性质1可知

  • $g$ 是满射(surjective),$h$ 是单射(injective)

进而据性质2可知

  • $g$ 和 $h$ 值域相同 $Rightarrow$ $m$ 等于 $f$ 的不同函数值的个数。换言之,$h$ 是 $f$ 值域中元素的一个排列。
  • $forall x_1, x_2 in [n], g(x_1) = g(x_2) Leftrightarrow f(x_1) = f(x_2)$ 。换言之,$h$ 和 $f$ 相似。

至此可得有解的一个必要条件:
对于 $f$ 值域中的任意两不同元素 $y_1, y_2$,$f(y_1) e f(y_2)$ 。

遗憾的是,这个必要条件太弱了。
样例

2
2 1

满足条件,却是无解的。

思路到这里就断了。

现在回过头来想,问题的根源在于:

在 $f$ 满足上面推导出的必要条件的情况下,将 $h$ 任取为 $f$ 值域中元素的一个排列后,再求 $g$ 时,性质1和性质2仍可能互相矛盾。

那么是否需要枚举排列呢?

我没有认识到的是

不论如何求解 $g$ 和 $h$,是否有解只取决于 $f$ 本身。

所以应当进一步挖掘有解的必要条件甚至充要条件。

题解上的分析

$$
left.
egin{aligned}
g circ h = mathbf{1} \
h circ g = f
end{aligned}
ight}
Longrightarrow
egin{aligned}
f circ f &= (h circ g) circ (h circ g) \
&= h circ (g circ h) circ g \
&= h circ mathbf{1} circ g \
&= h circ g \
&= f
end{aligned}
$$

若 $f(x) = y$,则 $f(y)=f(f(x))=f(x)=y$ 。
即 $f$ 值域中的每个元素都是 $f$ 的不动点(fixed point)。(性质3)

这个必要条件比上面那个必要条件强得多。

下面证明
若 $f$ 满足性质3,则将 $h$ 取为 $f$ 值域中元素的任意排列,依据性质2求出的 $g$ 都满足性质1。

$g(x) = h^{-1}(f(x))$
$g(h(x)) = h^{-1}(f(h(x))) = h^{-1}(h(x)) = x$

原文地址:https://www.cnblogs.com/Patt/p/6407687.html