loj#P3238. 「COCI 2019.11.16」Popcount

「COCI 2019.11.16」Popcount

题目描述

译自 COCI 2019/2020 Contest #2 T4「Popcount

微型代数自然中继器(简称 MALNAR)是小型可编程设备潮中最新的科技进步。在这个设备上,你可以用 MalnarScript 这一深奥的编程语言来进行编程。这一语言具有如下特性:

  • 程序的输入和输出分别是一个严格小于 2N2^N 的非负整数。
  • 在 MalnarScript 中你只能用一个 NN 位的无符号整数变量 AA。起始时该变量值为输入值,程序结束时将自动输出该变量的值。
  • MalnarScript 的源代码最多只能包含 KK 个按照 A=<expr> 格式给出的长度不超过 10001000 个字符命令,并依次执行。其中符号 <expr><expr> = A | <num> | (<expr><operator><expr>) 递归定义。

换句话说,符号 <expr> 所表示的内容可以为变量 AA,或者是符合 <num> 符号定义的内容,还可以是如括号内部分所示的操作值符合 <expr> 符号定义的二元运算。

上述定义中的 <num> 符号所表示的内容可以为严格小于 2N2^N 的十进制整数,而 <operator> 符号可以为 +-|&<<>>,分别表示加,减,按位或,按位与,左移和右移操作。

另外,字符 A 在 <expr> 符号中至多出现 55 次。

遇到溢出时,MalnarScript 会在模 2N2^N 下执行操作。例如,当 N=3N=3 时表达式 7+37+3 的结果为 22,而表达式 252-5 的结果为 55

各条命令右侧的结果将会被存入 AA。在计算右侧的表达式之前,MalnarScript 将会先把所有 AA 替换成当前值,然后按照一般的数学计算进行。例如,括号优先级最高。注意,计算过程中不需要考虑运算符优先级,因为最终结果已由括号唯一定义。

你的任务是输出一个符合 MalnarScript 的程序来计算输入的二进制表示中 1 的个数。

译者注:翻译中进行了一些意译以提高流畅度。

输入格式

第一行两个整数 N, KN,~K,含义如题目描述所示。

输出格式

第一行输出生成的 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))

数据范围与提示

子任务 11:该子任务约占总分值的 14%14\%,有 2N100, K=N12\le N\le 100,~K=N-1

子任务 22:该子任务约占总分值的 15%15\%,有 N=500, K=128N=500,~K=128

子任务 33:该子任务约占总分值的 31%31\%,有 1N40, K=71\le N\le 40,~K=7

子任务 44:该子任务约占总分值的 40%40\%,有 100N500, K=10100\le N\le 500,~K=10