Codeforces Round #496 (Div. 3) C Summarize to the Power of Two

本文介绍了一种使用C++中的位运算结合标准模板库(map)解决特定算法问题的方法。通过遍历输入数据并利用位运算来检查是否能找到配对元素,实现了高效的解决方案。适用于需要快速查找配对或补数的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路用个map存出线过的数然后用是1<<n的数去减,看这个数在mp里存不存在,注意如果和自身相等 需要看是不是出现次数大于1

1<<N 的n的范围要计算一波,起码是30才满足数据范围

#include<bits/stdc++.h>
using namespace std;


int a[120005];

int main(){
  int n;

  while(scanf("%d",&n)==1){

map<int,int>q;
int cnt=0;
    for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            q[a[i]]++;
    }
    for(int i=0;i<n;i++){
            int ok=0;
    for(int p=0;p<=30;p++){
            int t=(1<<p)-a[i];
       if(q[t]){
      if(t==a[i]&&q[t]==1){
        continue;
      }
        ok=1;
        break;

    }
  }
    if(!ok)cnt++;
}

  printf("%d\n",cnt);
  }


return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值