QOJ5090 妙妙题
XiaoShanYunPan · · 个人记录
题目链接。
题意
有
每个人都能看见其他人头上的帽子而不知道自己头上的帽子,在所有人完成观察后,所有人需要同时猜测自己头上帽子的颜色。
你需要给所有人制定对应的策略,使得每个人可以根据其他所有人的帽子颜色按照顺时针的顺序形成的颜色序列确定自己的帽子颜色。
注意:每个人都不能知道其它的信息,而只能知道对应的颜色序列。
你的策略不需要让所有人都猜对其帽子颜色,只需要使得其中至少有
数据范围:
下面是一个例子:
0
1 0
0
在这里,我们用 0 表示白帽子,1 表示黑帽子。
- 左边的人看见的颜色序列为
000; - 上边的人看见的颜色序列为
001; - 右边的人看见的颜色序列为
010; - 下边的人看见的颜色序列为
100。
你可以设计如下策略:
- 如果看到的是
000,则猜测1; - 如果看到的是
001,则猜测0; - 如果看到的是
010,则猜测0; - 如果看到的是
011,则猜测1; - 如果看到的是
100,则猜测0; - 如果看到的是
101,则猜测1; - 如果看到的是
110,则猜测1; - 如果看到的是
111,则猜测1;
这样的策略能够让上述例子中的四个人都猜对,但不一定会对于所有情况均满足条件。
题解
先考虑一个弱化版本,如果每个人知道自己的编号会怎样?
这个时候考虑限制是一半的人猜对,那么把人分成两半,一半一定对,一半一定错是符合要求的。
怎样构造一半对一半错?考虑可以设置一个要么对要么错的条件,一半假设该条件成立,另一半假设其不成立。
可以构造这样的条件为“黑帽子的总数为奇数”,如此设置一半的人认为总数为奇数,另一半认为总数是偶数,可以发现必然有一半正确。
由这个结论显然可以推断自己帽子的颜色,于是至少有
再考虑现在的问题,我们显然不能够直接分组,如果分组了就会导致我们的策略无法构造,因为不同的组对于同一个颜色序列的反应是不同的。
思考一下,如果我们此时想要分组,唯一的依据就是颜色序列,如果能够根据颜色序列来分组,我们就可以套用之前的解法解决此题。
人类智慧地,我们利用目前已知的所有黑帽子的人的信息来划定分组依据。
具体地,考虑所有人位于单位圆的
将所有帽子颜色为黑色的人的向量相加,得到的最终向量设为
这样我们达成了分组的目的,套用之前的解法即可。