前言:本萌新这里的笔记基本摘自于书+一些自己的浅层理解,如有错误请吐槽!欢迎指正!
鸽巢原理
定理:
如果n+1个物体,被放入n个盒子,那么至少有一个盒子包含两个或多个物体。(这一点无需证明也能理解吧)
应用1:
在13个人中存在两个人,他们的生日在同一个月份。(哇,看似好简单啊~这破应用!)
应用2:
问题:设有n对夫妇,为保证能够有一对夫妇被选出,至少要从这2n个人中选出多少人?
其实就是n+1个人对不对。考虑如果我选n个人的话?那么我们一定能构造x个男性,n-x个女性都不存在x个男性的配偶x∈[0,n],那么我们一旦多一个,一定会多一个异性使得“平衡破坏”,而产生一对夫妇。
应用3:
这个应用我觉得肯定有人做过这道题目:51nod 1103
我们简单的思考这个问题,考虑从1位置开始的m个前缀和。
我们排除这m个前缀和%m==0的情况,因为这样就已经满足整除m了。
我们知道除以m的数最多只有m-1个非零余数,那么bingo!很明显,这些前缀和必然存在相同的余数。so,如果前缀和sum[1,i]%m==sum[1,j]%m且i<j,那么是不是(sum[1,j]-sum[1-i])%m=0。所以一定存在。
应用4:
一位国际象棋大师有11周的时间备战一场锦标赛,他决定每天至少下一盘棋,但每周下棋不超过12盘。证明连续若干天,这位大师恰好下了21盘棋。
分析:11周-77天,我们考虑sum[1,i]代表从第一天开始到第 i 天的下棋盘数总数,我们能知道这个序列是严格递增的序列
sum[1,1]<sum[1,2]<sum[1,3]<......<sum[1,77],并且说一星期下棋不超过12盘,那么12*11=132,即
1≤sum[1,1]<sum[1,2]<sum[1,3]<......<sum[1,77]≤132.
现在去套上21!1+21(22)≤sum[1,1]+21<sum[1,2]+21<sum[1,3]+21<......<sum[1,77]+21≤132+21(153).
我们知道由于严格递增,对于任意i≠j,sum[1,i]≠sum[1,j],那么也就可以推出:对于任意i≠j,sum[1,i]+21≠sum[1,j]+21
那么对于这154(77+77)个数:sum[1,1],sum[1,2],sum[1,3],......,sum[1,77],sum[1,1]+21,sum[1,2]+21,sum[1,3]+21,......,sum[1,77]+21,
属于[1,153]范围内,一定存在两个相等的数!由于两类各自都不存在相等的数,那么一定存在:i,j,sum[1,i]+21=sum[1,j],也就是说在i+1,i+2,...,j连续这几天内下了21盘棋。
(这个应用开始有意思了?)