中级光能
题目链接: 酷町堂:4875 数字统计
题目描述 Description
给出n个正整数,现在要求出这n个正整数中,要使每一个数字都能在数组中找到另外一个不相同的数字,使得它们的和是2的某次幂。请问至少要删除多少个数字?
输入描述 Input Description
第一行,一个正整数,n
第二行,n个空格隔开的正整数,每个正整数不超过10^9
输出描述 Output Description
要使得数组中每个数字都满足条件,最少要删除的数字个数
样例输入 Sample Input
3 2 1022 4
样例输出 Sample Output
1
数据范围及提示 Data Size & Hint
n<=100000
33分
#include<iostream>
#include<map>
#include<cmath>
using namespace std;
long long n,a[100005],m,t,cnt;
map<long long,bool>q;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
q[a[i]]=1;
}
for(int i=1;i<=n;i++){
long long ji=2;
bool f=false;
for(int j=1;j<=31;j++){
if(ji>a[i]){
long long ans=ji-a[i];
if(ans!=a[i]&&q[ans]==1){
f=true;
break;
}
}ji*=2;
}
if(f==false)cnt++;
}
cout<<cnt;
return 0;
}
/*
3
2 1022 4
*/