【13年特长生第二题】数对

数 对 数对


提姆

考虑一组n个不同的正整数 a 1 , a 2 , . . . , a m a1,a2,...,am a1,a2,...,am,它们的值在 1 1 1 1000000 1000000 1000000之间。给定一个整数 x x x
写一个程序 s u m x sumx sumx计算这样的数对个数 ( a i , a j ) (ai,aj) (ai,aj) 1 < = i < j < = n 1<=i1<=i<j<=n并且 a i + a j = x ai+aj=x ai+aj=x

输入

标准输入的第一行是一个整数 n ( 1 < = n < = 1000000 ) n(1<=n<=1000000) n(1<=n<=1000000) 第二行有 n n n个整数表示元素。第三行是一个整数 x ( 1 < = x < = 2000000 ) x(1<=x<=2000000) x(1<=x<=2000000)

输出

输出一行包含一个整数表示这样的数对个数。

注意:对于 50 % 50\% 50%的测试数据, n < = 1000 n<=1000 n<=1000

输入样例

sumx.in
9
5 12 7 10 9 1 2 3 11
13

输出样例

sumx.out
3

样例解释

不同的和为 13 13 13的数对是 ( 12 , 1 ) , ( 10 , 3 ) (12, 1), (10, 3) (12,1),(10,3) ( 2 , 11 ) (2, 11) (2,11)

解题思路

这题我们直接根据题目来枚举然后判断即可

程序如下

#include
#include
#include
#include

using namespace std;

int n, x, ans;

int a[100001];

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)
		for(int j = i + 1; j <= n; ++j)
			if(a[i] + a[j] == x) ans++;
	printf("%d",ans);
	return 0;
}

你可能感兴趣的:(模拟,ssl)