NOIP2014初赛总结

本次比赛中唯一没做出来的题是问题求解的第一题,以及一道虽然做出来了但是没有严谨证明的题。这两道题虽然现在,通过问学长自己研究等方式我差不多已经解决了,但确是非常值得我思考、学习和总结的。(小序号标注的是我需要重点消化的内容)
        一、题意:从1、1、2、4、8、8中取4个数的不同排列数。
        事实上,在考场上的时候,我把这道题想的过于简单了。。直接看成了在这6个数中取6个的不同排列数,所以算的非常丧心病狂。
        --①这是不应该的,我应该仔细审题;当然,这也有很大一部分原因出于我对排列组合的不熟练。
当然,就算我看懂了题意,我恐怕也是做不对的。。所以,在分数上我是不后悔的——但这其实没有任何意义,后悔的必要性是存在且必须存在的。
        对于这道题,凭借我有限的做排列组合的经验,我本来打算用正难则反的思路:先把两个重复的1和8看成是地位相等的不同量,求全排列然后减去其重复的计算的量,即ans=P(4,6)-(带1 的个数)/2-(带8的个数)/2+(被多减的部分)。然后在这里我首先搞错了一个问题即:
        --②带1的个数≠带第一个1的个数+带第二个1的个数,尽管两个1是地位相等的。如果用Venn图来想的话,就是A={带第一个1的排列},B={带第二个1的排列},A∩B≠∅且A∩CuB≠∅,即二者地位相等交集非空且其之间不存在包含关系,亦即二者为同时具有共有元素和私有元素的两个集合。这点在后面还会提及和讨论。
        然后通过容斥原理,我们可以正确的算出带1的个数了,然后我们会到原式,我们发现(被多减的部分)这一项好像非常难以确定,因为以类似上述方式展开的话会得到一个很大很大的式子。。。于是我们发现这样做是困难的。
        如果正难则反是困难的话,让我们考虑一下正面的做法:
        做法一:暴搜。
        --③这是非常好的一个算法,也是非常需要我学习和接受的,在相当多的时候,写一个暴搜总比拿蛋强,而且暴搜写起来也是有艺术的。小浩浩就用暴搜做出来了这道题,但是换位思考,如果是我的话,我是绝对不会暴搜的。我应该从这之中学到些什么,学会暴搜,学会接受暴搜。
        比如在暴搜的过程中,其实我们就可以发现一些事情:
        做法二:对暴搜的改进=>分类。
        我问了faebdc学长和学姐这道题,他们的思路基本一致。当然,faebdc学长的思路要比学姐清晰很多;他一上来就明确的提出:这是对暴搜的改进。
        我们发现对此题造成奇怪影响的两个量是1和8,而它们的个数也只有两个而已,我们要组成的是一个四位数。那么正面考虑的话,就分类好了:考虑1选0个、1个、2个的情况,分别对应8选2个、1个和2个、0个和1个和2个,这样的话就转变成许多简单的小问题了,然后把它们都加起来就好了。
        --④若对n个元素全排列时有一组k个相同元素,实际上就等价于P(n,n)/P(k,k)=P(n,n-k)。
        1-0----8-2:P(4,4-2)=12
        1-1----8-2:2*P(4,4-2)=24
             ----8-1:P(4,4)=24
        1-2----8-2:2*C(3,1)=6
             ----8-1:2*P(4,4-2)=24
             ----8-0: P(4,4-2)=12
综上:ans=12+24+24+6+24+12=3*24+2*12+6=102
        二、在2n个元素同时查找最大最小值所需的最少比较次数?
        这道题的题意所指应为最坏情况下,因为若为最好情况的话,假设元素序列有序,则我们完全可以轻易得到2n-1的比较次数;即一遍扫过,只要最大值/最小值中的某一个被更新了,就没有比较另一个的意义了。但这道题的选项中没有2n-1,只有个比较接近的是2n-2。。所以我们考虑的应是最坏情况。
        既然是2n,显然是要二分的。。T(n)分出大小两组后组内比较只需要T(2n-2)。但这时我们想到一个问题,如果我们不断二分直到有一组元素个数为1,是否会取得更少的比较次数呢?
        若2n=2^k,k∈N,则T=-2+n+n+n/2+n/4+n/8……,n→+∞,T→3n-2...但如果n比较小、2n不为2的整数次幂该怎么办。。?
        于是考场上的时候。。我就举了好多例子。。n各种等,发现怎么等都是3n-2...于是我就对3n-2比较。。确定了,但是我其实还是不是很明白的。即使出了考场,也是花了很长时间也没有搞懂。。所以。。我就又问了学长。
        --⑤原来这题之所以可以二分优化,仅由于它是要同时找最大最小值,如果仅是找最大值或最小值的话,实际上比较次数必然是元素个数-1的,即使二分依然如是,亦即二分是没有意义的。而题目中,经过第一次二分后,在两组中要做的事情其实就仅仅是找最大/最小值了。

你可能感兴趣的:(NOIP2014初赛总结)