loj#P3238. 「COCI 2019.11.16」Popcount
「COCI 2019.11.16」Popcount
题目描述
译自 COCI 2019/2020 Contest #2 T4「Popcount」
微型代数自然中继器(简称 MALNAR)是小型可编程设备潮中最新的科技进步。在这个设备上,你可以用 MalnarScript 这一深奥的编程语言来进行编程。这一语言具有如下特性:
- 程序的输入和输出分别是一个严格小于 的非负整数。
- 在 MalnarScript 中你只能用一个 位的无符号整数变量 。起始时该变量值为输入值,程序结束时将自动输出该变量的值。
- MalnarScript 的源代码最多只能包含 个按照
A=<expr>
格式给出的长度不超过 个字符命令,并依次执行。其中符号<expr>
以<expr> = A | <num> | (<expr><operator><expr>)
递归定义。
换句话说,符号 <expr>
所表示的内容可以为变量 ,或者是符合 <num>
符号定义的内容,还可以是如括号内部分所示的操作值符合 <expr>
符号定义的二元运算。
上述定义中的 <num>
符号所表示的内容可以为严格小于 的十进制整数,而 <operator>
符号可以为 +
,-
,|
,&
,<<
或 >>
,分别表示加,减,按位或,按位与,左移和右移操作。
另外,字符 A 在 <expr>
符号中至多出现 次。
遇到溢出时,MalnarScript 会在模 下执行操作。例如,当 时表达式 的结果为 ,而表达式 的结果为 。
各条命令右侧的结果将会被存入 。在计算右侧的表达式之前,MalnarScript 将会先把所有 替换成当前值,然后按照一般的数学计算进行。例如,括号优先级最高。注意,计算过程中不需要考虑运算符优先级,因为最终结果已由括号唯一定义。
你的任务是输出一个符合 MalnarScript 的程序来计算输入的二进制表示中 1
的个数。
译者注:翻译中进行了一些意译以提高流畅度。
输入格式
第一行两个整数 ,含义如题目描述所示。
输出格式
第一行输出生成的 MarlnarScript 程序的行数。
接下来的各行输出你所生成的 MalnarScript。各个命令独占一行且必须符合题面描述中所述的语法要求。
重要:请勿输出无用的空行和空格,每行必须以 \n
结尾。
2 2
1
A=(A-((A&2)>>1))
3 5
2
A=((A&4)|((A&3)-((A&2)>>1)))
A=((A&3)+((A&4)>>2))
数据范围与提示
子任务 :该子任务约占总分值的 ,有 ;
子任务 :该子任务约占总分值的 ,有 ;
子任务 :该子任务约占总分值的 ,有 ;
子任务 :该子任务约占总分值的 ,有 。