51nod1056

题意

51nod

做法

定义:等差数列两个等差数列不同当且仅当任意相邻两项不同
结论:大小为(n)的集合长度至少为(k)的不同的等差数列个数是(O(frac{n^2}{k^2}))

证明:
定义两个位置靠近为距离不超过(frac{n}{k-1})。可以发现相同的等差数列至少存在一对靠近的位置。
由鸽巢原理可知,一个长度为(k)的等差数列至少有(frac{k-1}{2})对靠近的位置。
显然集合内靠近的对数不超过(frac{n^2}{k-1}),所以不同的等差数列不超过(frac{n^2}{k-1}/frac{k-1}{2}=O(frac{n^2}{k^2}))

大小为(n)的集合长度为(k)的等差数列,根据鸽巢原理,有(frac{k}{2})项出现在前(frac{n}{2})项或后(frac{n}{2})

(T(n,k))(n)集合长度至少为(k)的等差数列:分治左右两边(frac{k}{2})长度的等差数列,然后再扫一下另一边,用hash寻值
(T(n,k)=2T(frac{n}{2},frac{k}{2})+O(frac{n^2}{k^2} imes k)=O(frac{n^2}{k}logk))

原文地址:https://www.cnblogs.com/Grice/p/12782315.html