站外题求助
  • 板块题目总版
  • 楼主AlanWalker_1
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/9/8 15:59
  • 上次更新2024/9/8 19:18:15
查看原帖
站外题求助
1175010
AlanWalker_1楼主2024/9/8 15:59

题目描述

给定一个长度为 n 的数组 a 和 k,小信想知道数组中有多少对数相加等于 k 。

输入格式

第一行包含两个整数 n,k。

第二行 n 个整数 ai。

输出格式

输出一个整数表示有多少对。

样例

Input 1

3 4 2 2 2

Output 1

3

Input 2

4 5 3 1 2 4

Output 2

2

样例解释

样例1解释:

有 3 对数相加等于 4,分别是 (2,2), (2,2), (2,2)。

样例2解释:

有 2 对数相加等于 5,分别是 (1,4), (2,3)。

数据范围

1≤n≤105,1≤ai,k≤1091 \leq n \leq 10^5,1 \leq a_i,k \leq 10^9

#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求助

2024/9/8 15:59
加载中...