时空限制
CPU占用时长: 1秒内存使用限制: 512MB
问题描述
考虑一组n个不同的正整数a1,a2,...,an,它们的值在1到1000000之间。
给定一个整数x。写一个程序sumx计算这样的数对个数(a[i],a[j]),1<=i<j<=n并且a[i]+a[j]=x。
输入格式
第一行是一个整数n(1<=n<=100000)。
第二行有n个整数表示元素。
第三行是一个整数x(1<=x<=2000000)。
输出格式
输出一行包含一个整数表示这样的数对个数。
输入输出样例
样例1
输入样例
9
5 12 7 10 9 1 2 3 11
13
输出样例
3
数据范围与提示
n<=100000
x<=2000000
【样例说明】
不同的和为13的数对是(12, 1), (10, 3)和(2, 11)。
#include <bits/stdc++.h>
using namespace std;
int a[100011], h[2000011];
int main(){
int n, x, ans=0;
cin>>n;
for(int i=0; i<n; i++){
cin>>a[i];
h[a[i]]++;
}
cin>>x;
for(int i=1; i<n; i++){
if(x-a[i]<0){
continue;
}
ans+=h[x-a[i]];
}
ans/=2;
cout<<ans;
return 0;
}
样例过了,但是80分