#P6720. [BalkanOI2011] decrypt

[BalkanOI2011] decrypt

题目背景

这是一道 IO 交互题

题目描述

我们随机了三个数 R0,R1,R2R_0,R_1,R_2,并按以下规则生成了整个 RR 序列:

Rn=Rn2Rn1R_n=R_{n-2}\oplus R_{n-1}

其中 \oplus 为异或运算。

此外我们有一个函数 MM,其是一个双射,即我们保证对于 xyx\not=yM(x)M(y)M(x)\not=M(y)

您的目标是,经过多次询问后,确定 R0,R1,R2,M(0),M(1),,M(255)R_0,R_1,R_2,M(0),M(1),\ldots,M(255)

交互方式

你的程序应从标准输入中读入,向标准输出中输出。

您可以向标准输出中输出一个整数 AA,如果这是您的第 NN 次询问,您将会读入:

M(ARN1)M(A\oplus R_{N-1})

如果您已经得到了所有答案,请输出一行字符串 SOLUTION,然后输出 259259 行,分别是 R0,R1,R2,M(0),M(1),,M(255)R_0,R_1,R_2,M(0),M(1),\ldots,M(255)

记得在输出每一行后清空缓冲区!

提示

样例

(因为样例组不好表示所以放到这里)

我们人为规定 R0=0,R1=1,R2=3,M(i)=(i+1)mod256R_0=0,R_1=1,R_2=3,M(i)=(i+1)\bmod 256

可得 R3=1R_3=1

输出 输入 解释
1010 1111 M(100)=M(10)=11M(10\oplus 0)=M(10)=11
1212 M(101)=M(11)=12M(10\oplus 1)=M(11)=12
1111 99 M(113)=M(8)=9M(11\oplus 3)=M(8)=9
1212 1414 M(121)=M(13)=14M(12\oplus 1)=M(13)=14
省略了一部分输出
SOLUTION

数据范围及限制

对于 100%100\% 的数据,保证输入的数、输出的数、RR 数组、M(x)M(x) 中的 xxM(x)M(x)0\ge 0255\le 255

计分策略

如果您输出的数并不在上述范围内,您保龄。

您的询问次数需要少于 320320,否则,您保龄。

提示

清空缓冲区的方法:

C:

printf("%d\n", q);
fflush(stdout); 

C++:

cout<<q<< '\n';
cout.flush();

Pascal:

writeln(q);
flush(output);

说明

本题译自 Balkan Olympiad in Informatics 2011 Day 1 T2 decrypt

感谢

https://www.luogu.com.cn/user/60864
交互库。