信息学奥林匹克问题和颜色间隔?

时间:2015-03-27 10:43:13

标签: c++ algorithm math data-structures discrete-mathematics

这是2013年本地INOI信息学奥林匹克问题。

  

假设我们在实轴上有1393个点。我们要为此着色   对于每个任意区间[a,b],如果至少有一个,则指向这些点   在1393点之间的间隔,至少一点内   间隔与此间隔中的其他点具有不同的颜色。同   这可以做多少种颜色? (最佳答案是11)。

INOI承诺用11简短回答。我们如何计算这个问题?

2 个答案:

答案 0 :(得分:5)

权利要求

使用k颜色可以着色的最多点是2 ^ k-1。

证明

如果我们有0种颜色,那么显然我们可以不对任何点进行着色,所以k == 0就是这样。

对于k> 0,我们使用归纳法。

考虑包含所有点的区间。必须有一种颜色恰好出现一次。考虑这一点左边的点。这些点用k-1颜色着色,因此它们最多可以有2 ^(k-1)-1。

同样,右边最多有2 ^(k-1)-1。

总共最多可以有1 + 2 ^(k-1)-1 + 2 ^(k-1)-1 = 2 ^ k-1个k点的颜色。

2 ^ 10-1 = 1023,2 ^ 11-1 = 2047,所以这显示了你的情况下11种颜色的下限,而TonyK已经给出了一个结构,表明这可以实现。

答案 1 :(得分:3)

如果第n个点的颜色仅由n的二进制展开中的尾随零的数量确定,则满足条件。我们可以使用11种颜色,最多2047个点。

相反 - 我们可以用更少的点来做 -​​ 是另一个问题。

15分示例:

Binary Trailing zeroes Colour
------ --------------- ------
1      0               blue
10     1               red
11     0               blue
100    2               green
101    0               blue
110    1               red
111    0               blue
1000   3               yellow
1001   0               blue
1010   1               red
1011   0               blue
1100   2               green
1101   0               blue
1110   1               red
1111   0               blue