抽屉原理

poj:

3370:给出n个数,叫你从中选出任意个数,使得这些数的和是c的倍数。(n > c)

2356:在n个数组成的数列中找出若干个连续数使它们之和能被n整除


【抽屉原理】:原理1 把多于n个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件;

                         原理2 把多于mn(m乘以n)个的物体放到n个抽屉里,则至少有一个抽屉里有不少于m+1的物体。

                         原理3 把无穷多件物体放入n个抽屉,则至少有一个抽屉里 有无穷个物体。.

                         原理4 把(mn-1)个物体放入n个抽屉中,其中必有一个抽屉中至多有(m—1)个物体。


重要定理: 一个由n个数构成的数列,总能找到若干个连续的数 使它们之和能被n整除

证明: 对于数列里面的元素a[1],a[2],...... a[n]。我们可以构造一个数组sum[],用sum[ i ]来存储前i个元素之和(包括第i个元素)。

那么sum数组里面所有的元素只有两种情况:(1) 至少存在一个sum[ i ] 能被n整除;(2) 对于所有的sum[ i ] 都不能被n整除 。

情况(1):定理成立。。。

情况(2):首先我们知道sum数组里面有n个元素,又因为它们都不能被n整除,那么我们可以得到以下信息:任意的                (sum[i] %n)都非0且结果都在(1到n-1范围里面)这样的话--> n个结果在  1到n-1 范围内,必然存在两个相                等的结果。而这两个相同结果所对应的sum[] 之差 必定能被 n除。

     证毕。


猜你喜欢

转载自blog.csdn.net/ljq1998/article/details/79150309