题目描述
每个测试的时间限制:3 秒
每个测试的内存限制:256 兆字节
如果一个序列 a1,a2,…,an 满足:对于每个元素 ai,存在另一个元素 aj(i=j),使得 ai+aj 是 2 的幂(即 2d,其中 d 为非负整数),则称这个序列是好的。
例如,以下序列是好的:
- [5,3,11](例如,对于 a1=5,我们可以选择 a2=3。注意它们的和是 2 的幂。对于 a2 和 a3 也能找到这样的元素);
- [1,1,1,1023];
- [7,39,89,25,89];
- []。
注意,根据定义,空序列(长度为 0)也是好的。
以下序列不是好的:
- [16](对于 a1=16,无法找到另一个元素 aj 使得它们的和为 2 的幂);
- [4,16](对于 a1=4,无法找到另一个元素 aj 使得它们的和为 2 的幂);
- [1,3,2,8,8,8](对于 a3=2,无法找到另一个元素 aj 使得它们的和为 2 的幂)。
你有一个序列 a1,a2,…,an。为了使它成为好的序列,最少需要删除多少个元素?你可以删除任意一组元素。
输入格式
第一行包含整数 n(1≤n≤120000)—— 给定序列的长度。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109)。
输出格式
输出为了使序列成为好的序列,需要从给定序列中删除的最少元素个数。删除所有 n 个元素(得到空序列)是可行的。
6
4 7 1 5 4 9
1
5
1 2 3 4 5
2
1
16
1
4
1 1 1 1023
0
说明
- 第一个示例中,删除一个元素 a4=5 就足够了。剩余元素组成序列 [4,7,1,4,9],这是一个好序列。