zoukankan      html  css  js  c++  java
  • 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$

  • 相关阅读:
    poj 2481
    poj 3928 Ping pong
    再见oi
    NOIP 2014 解方程
    poj1836:Alignment
    poj2479:Maximum sum
    tyvj1510:专家复仇
    tyvj:P1467 通向聚会的道路
    tyvj1176: 火焰巨魔的惆怅
    tyvj1326:剑人合一
  • 原文地址:https://www.cnblogs.com/Patt/p/6407687.html
Copyright © 2011-2022 走看看