题目链接:http://codeforces.com/contest/988/problem/D
题意:给n个互不相同的数,在里面选取一些数组成集合,满足集合内的数任意两两绝对值之差是2的幂,求这个集合能构成的最多元素个数并分别输出。
题解:可以证明这个集合最大是3。假设三个数a,b,c能构成这个集合(a < b < c),则有b - a = 2 ^ x,c - b = 2 ^ y,c - a = 2 ^ z,则2 ^ x + 2 ^ y = 2 ^ z
显然z > x并且z > y,不妨设x < y,两边同时除以2 ^ x,则 1 + 2^(y - x) = 2^(z - x),要使该等式成立,则y - x = 0,z - x = 1
即 x = y = z - 1,进一步的,a + c = 2 * b
假设存在4个数a,b,c,d(a < b < c < d)能构成该集合,依据上面的结论有 a + c = 2 * b,a + d = 2 * b,推出 c = d,矛盾,则结论成立。
知道了最多有三个,则可以枚举出现的集合大小。