给定一个长度为 n 的数组 a 和 k,小信想知道数组中有多少对数相加等于 k 。
第一行包含两个整数 n,k。
第二行 n 个整数 ai。
输出一个整数表示有多少对。
3 4 2 2 2
3
4 5 3 1 2 4
2
有 3 对数相加等于 4,分别是 (2,2), (2,2), (2,2)。
有 2 对数相加等于 5,分别是 (1,4), (2,3)。
1≤n≤105,1≤ai,k≤109
#include<bits/stdc++.h>
using namespace std;
map<int,int>mp;
int n,k;
long long ans;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
int x;
cin>>x;
mp[x]++;
}
for(auto i=mp.begin();i!=mp.end();i++){
int j=k-i->first;
if(i->first==j){
ans+=0ll=mp[i->first]*(mp[i->first]-1)/2;
}else if(mp.find(j)!=mp.end()){
ans+=0ll+mp[j]*mp[i->first];
}
mp[j]=0;
mp[i->first]=0;
}
cout<<ans;
return 0;
}
90pts求助