#P7040. [NWRRC 2016] Java2016

[NWRRC 2016] Java2016

Description

John 喜欢学习晦涩的编程语言。最近他发现了概率编程语言 Java2K。Java2K 的内置函数只有一定的概率能够执行你想让它们做的事情。

Java2K 编程非常困难,所以 John 设计了一种更简单的语言用于训练:Java2016。Java2016 的内置运算符是确定性的,而它们的操作数是随机的。在 Java2016 中,每个值都是范围在 02550 \cdots 255 之间的正整数。

Java2016 支持三种优先级的六个运算符:

$$\begin{aligned} {\langle \mathrm{expression}\rangle}&\quad::=\quad{\langle \mathrm{expression}\rangle}\operatorname{`\texttt{min}\text'}{\langle \mathrm{sum}\rangle}\mid{\langle \mathrm{expression}\rangle}\operatorname{`\texttt{max}\text'}{\langle \mathrm{sum}\rangle}\mid {\langle \mathrm{sum}\rangle}\\ {\langle \mathrm{sum}\rangle}&\quad::=\quad{\langle \mathrm{sum}\rangle}\operatorname{`\texttt{+}\text'}{\langle \mathrm{term}\rangle}\mid{\langle \mathrm{sum}\rangle}\operatorname{`\texttt{-}\text'}{\langle \mathrm{term}\rangle}\mid{\langle \mathrm{term}\rangle}\\ {\langle \mathrm{term}\rangle}&\quad::=\quad{\langle \mathrm{term}\rangle}\operatorname{`\texttt{*}\text'}{\langle \mathrm{factor}\rangle}\mid {\langle \mathrm{term}\rangle}\operatorname{`\texttt{\/}\text'}{\langle \mathrm{factor}\rangle}\mid {\langle \mathrm{factor}\rangle}\\ {\langle \mathrm{factor}\rangle}&\quad::=\quad\operatorname{`\texttt{(}\text'}{\langle \mathrm{expression}\rangle}\operatorname{`\texttt{)}\text'}\mid `\texttt{?}\text'\mid {\langle \mathrm{macro}\rangle} \end{aligned}$$

最小值(min)和最大值(max)运算符的定义与通常相同。加法(+)、减法(-)和乘法(*)的定义是模 256256。除法(/)的结果向零取整。如果除数为零,程序崩溃。运算符的参数是另一个运算符的结果、均匀分布的随机值(?)或宏替换。

例如,?/?/? 被评估为零的概率是 98.2%98.2\%,而崩溃的概率是 0.8%0.8\%

Java2016 程序由零个或多个宏定义组成,后跟结果表达式。每个宏定义的形式为:

$$\begin{aligned} {\langle \mathrm{macrodef}\rangle}&\quad::=\quad{\langle \mathrm{macro}\rangle}\operatorname{`\texttt{=}\text'}{\langle \mathrm{expression}\rangle}\\ {\langle \mathrm{macro}\rangle}&\quad::=\quad\operatorname{`\texttt{a}\text'}\ldots\operatorname{`\texttt{z}\text'} \end{aligned}$$

宏应该在第一次使用之前定义。它不能被重新定义。宏在每次使用时扩展为其定义。例如,

a = ? max ?
(a max $a) / a

被扩展为 ((? max ?) max (? max ?)) / (? max ?)

John 打算向 Java2016 添加概率常量,因此对于每个可能的常量值,他需要一个程序,该程序能够以至少一半的概率成功评估为该值。崩溃被计入失败。

Input Format

输入包含一个整数 cc —— 目标常量 (0c255)(0 \le c \le 255)

Output Format

输出一个 Java2016 程序,该程序成功评估为常量 cc 的概率不小于 1/21/2。程序的总长度不应超过 256256 个字符(不包括空格)。

0

? /?/ ?

1

a = ? max ?
(a max a) / a

Hint

时间限制:2 秒,内存限制:512 MB。

题面翻译由 ChatGPT-4o 提供。