E题纯属是诈骗题,很多人估计赛时都是看一眼就被吓跑了,实际上静下心来再看一眼就会爆炸(

题干解析: mootra有个X,数值为n(未知,尤其不要与下面输出描述中的n混淆)

mootra还有1000个变量给你用,其中O1大小为n,其余为零。(很明显在这道题用不了这么多)

六种指令:

1.new x n=n+1(变动X,要明确X就是n!);Ox=n(将X赋值给Ox);(注意这个代码有两个功能,一是将x+1,二是把x(n)赋值给Ox);

2.dec x Ox--;

3.assign x y: Ox=Oy(普通赋值);

4.iftry x goto L: 如果Ox>=0,跳转到第L条语句;

5.ifeq x y goto L: 如果Ox=Oy,跳转到第L条语句;

6.ifneq x y goto L: 如果Ox!=Oy,跳转到第L条语句;

对于后三种语句需保证 Lnow>L(只能回溯)

另外,你不可以使用超过 1000 条语句或者下标超过1000 的寄存器,你的程序实际循环次数不能超过100000次,否则将判错(该题太过简单,不受限制)

ok,进入正题:

任务:

eg.将n变为n+1(实则是指把X变为n+1)

样例:

1(代码用了一行)

new 1(将X+1)

任务eg是给我们示范用的,我们真正目的是把n变为4n,即把X变为4n. 要知道我们变化X值的方法只有一个,就是指令1.new x.该指令可以让X+1,同时把+1后的X赋值给指定变量(Ox

由于不知道n的具体数值,所以我们无法直接通过3n个new x指令来完成。

哎!我有一计!那我们循环n次,每次三个new x,不就万事大吉等着领首杀奖了吗!

跟循环有关的只有后边三个指令,一眼顶针指令4,只需要在循环体中加入dec x,让Ox每次循环-1,那这不就是while(Ox--)吗!

ok,那我们需要两个变量,一个用于n次循环(类似while(n--)的n),一个用于new增长X.

为什么用两个变量?一个行不行?

注意指令1在给X+1的同时会赋值给指定变量Ox,所以要避免赋值操作覆盖我们-1的操作,因此要两个变量.

另外需要注意,指令4只能向前回溯,所以相比普通while,应该do while更贴切.

同时因为Ox>=0时触发回溯,所以循环条件变量应为n-1。

ok,开始表演:

 	1.dec 1(因为O*1*初始默认为n,需要-1来达到循环n次的目的)
    --开始循环--
    2.dec 1(每次循环O*1*-1,可循环n次)
    3.new 2(X++,不需要管O*2*大小,与我无瓜)
    4.new 2
    5.new 2
    --一次循环结束--
    6.iftry 1 goto 2(每次循环开始时跳到2语句)

(代码共六行,等着拿首杀奖吧)

完结撒花 ps:提交的时候记的要把语言改为php,c++可能会有问题. 顺带一提我的答案是目前步数最少思路最简单的,五步的实现我暂且想不到,有大佬能五步结局的话还望踢我一下。 第一次写题解,语言逻辑也许不清晰,望包涵,目的主要是锻炼自己,能帮到你们当然是最好。:D
再次撒花