#P6720. [BalkanOI 2011] decrypt

    ID: 7496 远端评测题 100ms 64MiB 尝试: 0 已通过: 0 显示难度暂无评定 上传者: 标签>2011交互题Special JudgeBalkanOI(巴尔干半岛)

[BalkanOI 2011] decrypt

背景

这是一道 IO 交互题。

题目描述

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

Rn=Rn−2⊕Rn−1R_n=R_{n-2}\oplus R_{n-1}

其中 ⊕\oplus 为异或运算。

此外我们有一个函数 MM,其是一个双射,即我们保证对于 x≠yx\not=y,M(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(A⊕RN−1)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) mod 256R_0=0,R_1=1,R_2=3,M(i)=(i+1)\bmod 256。

可得 R3=1R_3=1。

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

数据范围及限制

对于 100%100\% 的数据,保证输入的数、输出的数、RR 数组、M(x)M(x) 中的 xx 与 M(x)M(x) 均 ≥0\ge 0 且 ≤255\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
交互库。