#P7040. [NWRRC 2016] Java2016
[NWRRC 2016] Java2016
题目描述
John likes to learn esoteric programming languages. Recently he discovered the probabilistic Java2K. Built-in functions of Java2K have only a certain probability to do whatever you to do.
The Java2K programming is very hard, so John designed a much simpler language for training: Java2016. operators of Java2016 are deterministic, while their operands are random. Each value in a positive integer in the range , inclusive.
Java2016 supports six operators of three precedencies:
$$\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} $$Minimum and maximum operators are defined as usual. Addition subtraction multiplication are defined modulo . The result of the division is rounded towards zero. the divider is zero, the program crashes. The argument of the operator is a result of another distributed random value , or macro substitution.
For instance, the probability that is evaluated to zero is , while the probability of is .
The Java2016 program consists of zero or more macro definitions, followed by the resulting expression. macro definition has a form of
$$\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} $$The macro should be defined before the first use. It may not be redefined. The macro is expanded to on each use. For instance,
a = ? max ?
(a max $a) / a
is expanded to ((? max ?) max (? max ?)) / (? max ?).
John is going to add probabilistic constants to Java2016, so for each possible constant value he needs that successfully evaluates to this value with at least one-half probability. Crashes are failures.
输入格式
The input contains a single integer -- the target constant .
输出格式
Output a Java2016 program that successfully evaluates to constant with probability no less than . total length of the program should not exceed characters (excluding spaces).
0
? /?/ ?
1
a = ? max ?
(a max a) / a
提示
Time limit: 2 s, Memory limit: 512 MB.