zoukankan      html  css  js  c++  java
  • 第31届IMO 第2题


    题目

    设n>=3,考虑一个圆上由2n-1个不同点构成的集合E。现给E中恰好k个点染上黑色,如果至少有一对黑点使得这两个黑点之间的弧上(两段弧中的某一个)包含恰好E中的n个点,就成这样的染色方法是“好的”。

    试找出对于集合E能保证任意一种染色方法都是“好的”的最小的k值。


    解答

    将问题转化为:一个圆上有2n-1个点,一开始都是白色的,将点一个一个染色,染的点必须满足染色方法是“好的”,分析易知,每染一个点,剩下的点里可以染的点的个数-2或-1或-0,我们想找的最小的k值,就是  能染的最多的点+1,这样的话染K个点必然会满足条件。

    思考如何才能染最多的点,染色策略如下:染那些可以让染的点减少最少的点。例如,染A点后,剩下的点里可以染的点数目-2;染B点后,剩下的点里可以染的点数目-1;染C点后,剩下的点里可以染的点数目-0;那么就染C点。

    这样染色的原因很简单,只要能保证每次都是染那些“损耗”最小的点,那么就可以染最多的点。 但是可能会有一种例外:先染一个-2的点,可能之后会出现两个-0的点,这样就会出现一共染了3个点,但是损耗-2,如果“损耗”最小的点都是-1的话,那么染3个点,损耗-3,即染了相同的点,剩下的点里可以染的点少了,如果这种情况存在的话,那么我们的策略就不对了,但是,这种情况是不存在的,下面给出证明。

    先证明-0的点一定是由-2的点得到的:用反证法,假设不是,那么就会得到有无穷个点的结论,得到矛盾。

    对染了-2的点经过一系列变化再染-0点这个过程进行分析,该过程可等价为-1····-1,即对于-2,-0,可以看作-1,-1,那么如果存在-2,-0,-0,那么就存在-1,-1,-0,而-1,-1,-0是符合我们的染色策略的,所以我们的策略没问题。

    知道了染色策略就要求k值了,我们可以先画一个圆,再随便染一个点,此时剩下的点里的损耗-2的,然后利用我们的策略进行染色,在分析的过程中,会出现第一个点对应的损耗点与第一个点的间隔为3的倍数和非3的倍数两种情况,对于第一种情况(2n-1是3的倍数),k=((2n-1)/3-1)/2 ×3 +1 =n-1,或者 k=(((2n-1)/3-3)/2+1)×3+1=n-1;对于第二种情况(2n-1不是3的倍数),进行简单的画图模拟,可以得到 k=(2n-1 -3)/2+1+1=n

  • 相关阅读:
    用DirectX Audio和DirectShow播放声音和音乐(7)
    [转载]如何自学中医
    光照示例
    用DirectX Audio和DirectShow播放声音和音乐(5)
    DirectX 图形接口指南
    程序员的灯下黑:临渊羡鱼和退而织网
    使用DirectInput进行交互(3)
    Win32开发中最易踏上的地雷
    D3D中粒子效果实现示例
    用DirectX Audio和DirectShow播放声音和音乐(3)
  • 原文地址:https://www.cnblogs.com/lau1997/p/11377631.html
Copyright © 2011-2022 走看看