1. 程式人生 > >萌新筆記之鴿巢原理及其應用

萌新筆記之鴿巢原理及其應用

前言:本萌新這裡的筆記基本摘自於書+一些自己的淺層理解,如有錯誤請吐槽!歡迎指正!

鴿巢原理

定理:

如果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盤棋。
(這個應用開始有意思了?)

應用5:

應用6(中國剩餘定理):