鸽巢原理又称抽屉原理——

如果n+1个物体被放进n个盒子,那么至少有一个盒子包含两个或两个以上的物体。

证明:如果这n个盒子中每个都至多含有一个物体,那么物体总数最多是n,和已知的有n+1个物体矛盾,故某个盒子必然含有两个及以上的物体。

 

应用

例:给定一个含有n个正整数的数列A,找到一对i,j(鸽巢原理_区间和)使得鸽巢原理_前缀和_02是n的整数倍数。

我们可以预处理出所有的前缀区间和对于n取模的结果。如果这n个模数中有一个结果为0,那么这个前缀和就是n的整数倍。否则,剩下的取模结果只有n-1种,但是一共有n个 结果,那么这n个结果中必然有两个摸是一样的。那么对于这两个取模结果相同的区间相减,就得到了一个n的整数倍区间。

这是鸽巢原理在竞赛中一个最经典的应用。