题目描述
如果两个数之和为 2022,则称这两个数组成了一个 “2022 数对”。
现在,给定 n 个互不相同的整数,统计其中有多少对整数之和为 2022。
输入格式
第一行一个整数 n(2≤n≤10000)
第二行 n 个整数 ai,且 ai 的绝对值不超过 10000。
输出格式
输出一个整数,为 2022 数对的数量,不能重复统计。
样例 #1
样例输入 #1
5
1 2021 1000 1022 3
样例输出 #1
2
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
map<int,bool>mp;
int main()
{
int n;
cin>>n;
int ans=0;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
ans+=mp[2022-x];
mp[x]++;
}
cout<<ans;
return 0;
}
这道题本来不是很难,但是UKE了,因为当时开的是桶数组,而下标会出现负数。中间一通加偏移一直不对劲,最后用的map就好了,还优化了一下,直接在输入时写完了。