题目描述
给出 n 个不同的正整数 a[1] ~ a[n],它们的值在 1~1000000 之间。再给定一个整数 x,编程计算这样的数对个数(a[i],a[j]),1≤i<j≤n 并且 a[i]+a[j]=x。
输入
从文件 sumx.in
中读入数据。
第 1 行 1 个正整数 n,1≤n≤100000。
第 2 行 n 个正整数,表示元素 a[1] ~ a[n],每两个数之间用一个空格分隔。
第 3 行 1 个正整数 x,1≤x≤2000000。
输出
输出到文件 sumx.out
中。
一行一个整数,表示这样的数对个数。
样例输入 复制
9 5 12 7 10 9 1 2 3 11 13
样例输出 复制
3
提示
不同的和为 13 的数对是(12,1),(10,3)和(2,11),共 3 对。
代码:
#include<bits/stdc++.h>
using namespace std;
int n, x;
long long ans;
int p[10000001],a[10000001];
int main()
{
freopen("sumx.in","r",stdin);
freopen("sumx.out","w",stdout);
scanf("%d", &n);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
scanf("%d",&x);
for(int i=1;i<=n;++i)
{
if (x-a[i]<=0)
continue;
ans+=1ll*p[x-a[i]];
p[a[i]]++;
}
printf("%lld", ans);
}