#CF1005C. 2 的幂次和

2 的幂次和

题目描述

每个测试的时间限制:3 秒
每个测试的内存限制:256 兆字节

如果一个序列 a1,a2,,ana_1, a_2, \dots, a_n 满足:对于每个元素 aia_i,存在另一个元素 aja_jiji \neq j),使得 ai+aja_i + a_j 是 2 的幂(即 2d2^d,其中 dd 为非负整数),则称这个序列是好的

例如,以下序列是好的:

  • [5,3,11][5,3,11](例如,对于 a1=5a_1 = 5,我们可以选择 a2=3a_2 = 3。注意它们的和是 2 的幂。对于 a2a_2a3a_3 也能找到这样的元素);
  • [1,1,1,1023][1,1,1,1023]
  • [7,39,89,25,89][7,39,89,25,89]
  • [][]

注意,根据定义,空序列(长度为 00)也是好的。

以下序列不是好的:

  • [16][16](对于 a1=16a_1 = 16,无法找到另一个元素 aja_j 使得它们的和为 2 的幂);
  • [4,16][4,16](对于 a1=4a_1 = 4,无法找到另一个元素 aja_j 使得它们的和为 2 的幂);
  • [1,3,2,8,8,8][1,3,2,8,8,8](对于 a3=2a_3 = 2,无法找到另一个元素 aja_j 使得它们的和为 2 的幂)。

你有一个序列 a1,a2,,ana_1, a_2, \dots, a_n。为了使它成为好的序列,最少需要删除多少个元素?你可以删除任意一组元素。

输入格式

第一行包含整数 nn1n1200001 \le n \le 120000)—— 给定序列的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1091 \le a_i \le 10^9)。

输出格式

输出为了使序列成为好的序列,需要从给定序列中删除的最少元素个数。删除所有 nn 个元素(得到空序列)是可行的。

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=5a_4 = 5 就足够了。剩余元素组成序列 [4,7,1,4,9][4,7,1,4,9],这是一个好序列。