P13632 [NWRRC 2021] Extreme Problem
题目描述
许多编程竞赛中的题目在某些方面都非常极端。例如:
- 有些题目需要你在纸上进行大量复杂的数学运算,然后输出一个众所周知的数字,并按输入文件给定的位数进行四舍五入;
- 有些题目长达四页以上,需要你编写一个模拟系统,跟踪多个特工的多项技能,并为每次任务选择最佳的特工组合;
- 还有些题目已被证明根本不存在正确解法,但依然被拿来作为比赛题目。
这一次,你将遇到一个同样极端的题目,因为它只有八组可能的测试数据。当然,这个题目也与“极端”有关。
我们考虑定义在 $[-10;10] \times [-10;10]$ 方格上的两个整数变量的函数。这意味着你只能对 $f(x, y)$ 进行调用,其中 $x$ 和 $y$ 必须是整数,且 $-10 \le x, y \le 10$。如果函数 $f$ 在点 $(x, y)$ 满足以下所有条件,则称其在该点有一个“局部极小值”:
- $f(x, y) < f(x-1, y)$;
- $f(x, y) < f(x+1, y)$;
- $f(x, y) < f(x, y-1)$;
- $f(x, y) < f(x, y+1)$。
“局部极大值”的定义类似,只是将不等号方向反过来。如果函数 $f$ 在点 $(x, y)$ 满足下列至少一个条件,则称其在该点有一个“平台”:
- $f(x, y) = f(x-1, y)$;
- $f(x, y) = f(x+1, y)$;
- $f(x, y) = f(x, y-1)$;
- $f(x, y) = f(x, y+1)$。
注意,上述所有函数调用都必须发生在函数定义域内,即 $[-10;10] \times [-10;10]$ 的方格上。特别地,这意味着边界上的点$\textbf{不能}$是局部极大值或局部极小值,但仍然可以是平台。
你需要构造一个函数,使其满足输入中指定的以下性质(有或没有,取决于输入):
- 多个局部极大值;
- 多个局部极小值;
- 存在平台。
注意,“多个”指的是“至少两个”。另外,你的函数必须按照特定的方式定义,详见输出部分。
输入格式
输入包含三行。
- 第一行以 $\texttt{Multiple local maxima:~}$ 开头,以 $\texttt{Yes}$ 或 $\texttt{No}$ 结尾,表示你的函数是否应当有多个局部极大值。
- 第二行以 $\texttt{Multiple local minima:~}$ 开头,以 $\texttt{Yes}$ 或 $\texttt{No}$ 结尾,表示你的函数是否应当有多个局部极小值。
- 第三行以 $\texttt{Plateaus:~}$ 开头,以 $\texttt{Yes}$ 或 $\texttt{No}$ 结尾,表示你的函数是否应当有平台。
输出格式
输出应为一行,用来定义你的函数。
如果不存在符合要求的函数,输出 $\texttt{No solution}$。
否则,请使用逆波兰表示法(Reverse Polish Notation, RPN)描述你的函数。逆波兰表示法是一种用栈式机器描述函数的方法:它是一系列操作的序列,其中有些操作将数值压入栈中,有些操作从栈顶取出若干数值,进行运算后将结果压回栈中。
你的函数最多包含 1000 个以单个空格分隔的记号,每个记号可以是以下之一:
- 一个整数常数,范围为 $-9$ 到 $+9$。这会将对应的数字压入栈中。
- 一个变量,$\texttt{x}$ 或 $\texttt{y}$。这会将该变量的值压入栈中。
- 一个操作符,可以是 $\texttt{+}$、$\texttt{-}$、$\texttt{*}$ 或 $\texttt{\textasciicircum}$。星号表示乘法,$\texttt{\textasciicircum}$ 表示幂运算。每个操作符会从栈中取出两个数,执行相应运算,并将结果压回栈中。运算顺序为 $\texttt{9 5 -}$ 计算结果为 4,$\texttt{x 2 \textasciicircum}$ 计算结果为 $x^2$。特殊情况 $0^0$ 规定为 $1$。
注意,若发生以下任一情况:
- 某个操作试图从空栈中取数;
- $\texttt{\textasciicircum}$ 操作试图对负指数求幂;
- 运算结果超出 32 位有符号整数范围;
- 运算结束后栈中元素数量不为 1——
你在该测试点会被判为 Wrong Answer。
说明/提示
第一个测试点的示例答案编码了函数 $(x-3)^4 + (y + (-5))^2$。注意它没有局部极大值,没有平台,且只有一个局部极小值。
由 ChatGPT 4.1 翻译