POJ-3370(鸽巢原理)

来源:互联网 发布:网络高清机顶盒那个品牌好 编辑:程序博客网 时间:2024/05/20 20:21

所谓鸽巢原理,即n+1只鸽子,只有n个巢,则至少有一鸽巢有两只鸽子。

鸽巢原理理解起来并不困难,有些题目需要转换一下。


    题意:有n个数,可能相同也可能不相同,从中取出一些数,使它们的和能被c整除(c<=n),任意输出一种方案。


    解:构造序列si,使得


          s1 = a1


          s2 = a1 + a2


          s3 = a1 + a2 + a3


          ...


          sn = a1 + a2 + ... + an


    这样,有两种可能:


       (1) 若其中有一项si是c的倍数,则即找到解;


       (2) 否则,si=ri (mod c),取值只可能在[1,c-1]这c-1个数,然而有n个数,且c<=n,则必然存在两个数si和sj对c取模相等。首先肯定了原问题的答案肯定存在。若sj>si,则序列ai+1,...aj即为原问题的一种方案。