问题标题: 酷町堂:4875 数字统计

0
0
胡景波
胡景波
中级光能
中级光能

题目链接: 酷町堂: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

*/


0
0
米锐轩
米锐轩
高级守护
高级守护

ennn...

你逻辑就有问题

我要回答