暑假集训D22 2023.8.17 补题

D.Dice Grid

题意:你有一个骰子,六个面各有颜色.现在有一个 \(n\times n\) 的方格,每个格子有颜色 \(c_{i,j}\) ,当骰子处于某一个格子时,其底部的颜色必须与格子的颜色相同.问你应该如何将骰子进行染色,使得骰子可以从 \((1,1)\) 走到 \((n,n)\) .

\(\operatorname{Solution}\) 搜索
为了解决这个问题,我们将尝试移动一个最初未知颜色的立方体,逐渐为立方体的边着色。

由于我们必须考虑所有可能的路径和着色选项,我们将构建下一个图。

它的顶点是三元组 {\(cube,i,j\)},其中 cube 是一个由立方体六种颜色组成的序列,初始颜色 \(-1\),表示颜色未知,而 \((i,j)\) 是我们所在细胞的坐标。禁止立方体底部面颜色未知或与单元格 \((i,j)\) 颜色不匹配的顶点。从顶部移动边向上或向左移动。

然后,你可以从终点单元格 \((n,n)\) 开始 \(BFS\)\(DFS\) ,向左和向上移动到达单元格 \((1,1)\).

如果我们能用某种方式对立方体进行着色,那么得到的着色就是答案。

向左和向上移动后的立方体变换可以在遍历过程中得到颜色序列。唯一需要存储的是访问过的顶点。

可以证明这样一个图中的顶点数是 \(O(n^4)\),因为可以证明立方体不同状态的数是 \(O(n^2)\)

时间复杂度 \(O(n^4)\)

F.Focusing on Costs

题意:你可以使用三角函数sin、cos、tan及反三角函数asin、acos,atan,使得你可以计算出 a/b .请给出函数的使用次数和顺序(最多使用 \(1000\) 次)

\(\operatorname{Solution}\)

可以用 \((arctan\ sin)^k(x)\) 反复操作,对任意自然数 \(k\) 凑出 \(1/\sqrt k\).
\(f(x) = sin(arctan(x)) = x/\sqrt{x^2+1}\) ,容易联想到 \(f^k(x) = x/\sqrt{kx^2+1}\) ,令其为 a/b 可得到不定方程.
\(g(x) = cos(arctan(x)) = 1/\sqrt{x^2+1}\) ,迭代后 \(g^k(x) = \sqrt{\frac{F_{k-1}+F_{k-2}x^2}{F_k+F_{k-1}x^2}}\) ,其中 \(F_0 = F_1 = 1,F_{n+2} = F_{n+1}+F_n,\forall n \in N\) .

假设要做 \(g(x) = a/b\) ,则会得到 \(x^2 = \frac{b^2-a^2}{a^2}\) ,而这个 \(x\) 就可以递归的去找它是由什么东西凑出来的了.
而这么做的条件是 \(b\geq a\) ,那么如果 \(b<a\) 该如何处理?

\(f(x) = sin(arctan(x)) = \frac{x}{\sqrt{1+x^2}}\) , \(h(x) = tan(arccos(x)) = \frac{\sqrt{1-x^2}}{x}\) , \(h(f(x)) = \frac{1}{x}\),这样如果 \(b<a\) 直接用这个函数交换即可.

posted @ 2023-08-18 19:09  LZH_03  阅读(19)  评论(0编辑  收藏  举报