Problem:
Score : 600 points

Problem Statement

Takahashi has N balls with positive integers written on them. The integer written on the i-th ball is A_i.
He would like to form some number of pairs such that the sum of the integers written on each pair of balls is a power of 2.
Note that a ball cannot belong to multiple pairs.
Find the maximum possible number of pairs that can be formed.

Here, a positive integer is said to be a power of 2 when it can be written as 2^t using some non-negative integer t.

Constraints

1 \leq N \leq 2\times 10^5

1 \leq A_i \leq 10^9

A_i is an integer.

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible number of pairs such that the sum of the integers written on each pair of balls is a power of 2.

Sample Input 1

3
1 2 3

Sample Output 1

1

We can form one pair whose sum of the written numbers is 4 by pairing the first and third balls.
Note that we cannot pair the second ball with itself.

Sample Input 2

5
3 11 14 5 13

Sample Output 2

2

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

N = gets.to_i
as = gets.strip.split(/ /).collect{|n| n.to_i}

max = as.max

table = {}

N.times{|n|
	a = as[n]
	if t = table[a]
		t << n
	else
		table[a] = [n]
	end
}

#p table

$counts = {}
$counts_rev = {}
$pairs = {}
N.times{|i|
	a = as[i]
	sum = 2
	count = 0
	pair_table = {}
	while sum <= a
		sum *= 2
	end
	while true
		if sum > a
			diff = sum - a
			if diff > max
				break
			end
			if list = table[diff]
				if (diff == a ? list.length - 1 : list.length) > 0
#					pair_table[diff] = {}
					list.each{|n|
						if n != i
							count += 1
							pair_table[n] = true
						end
					}
				end
			end
		end
		sum *= 2
	end
	if c = $counts[count]
		c[i] = true
	else
		$counts[count] = { i => true }
	end
	$pairs[i] = pair_table
	$counts_rev[i] = count
}

#p $counts
#p $pairs

max = $counts.keys.max

def remove_item(n)
#p ["y", $counts_rev, n]
	count = $counts_rev[n]
	count_table = $counts[count]
	count_table.delete(n)
	if count_table.length == 0
		$counts.delete(count)
	end
	$counts_rev.delete(n)
	min = N
	$pairs[n].keys.each{|n2|
		count = $counts_rev[n2]
		table = $counts[count]
#p [$counts, $counts_rev, n2, count]
#p table
		table.delete(n2)
		if table.length == 0
			$counts.delete(count)
		end
		count -= 1
		$counts_rev[n2] = count
		if table = $counts[count]
			table[n2] = true
		else
			$counts[count] = { n2 => true }
		end
		if count < min
			min = count
		end
		$pairs[n2].delete(n)
	}
	min
end

count_pairs = 0
count = 1
while true
	if (table = $counts[count]) && table.length > 0
#		p ["x", $counts, count, table]
		n1 = table.keys[0]
#		a1 = as[n1]
		n2 = $pairs[n1].keys[0]
#		a2 = as[n2]
		count_pairs += 1
		
		min1 = remove_item(n1)
		min2 = remove_item(n2)
		
		if table.keys.length == 0
			table.delete(count)
		end
		
		count = [count, min1, min2].min
		if count < 1
			count = 1
		end
		
		next
	end
	count += 1
	if count > max
		break
	end
end

puts count_pairs