题目描述
给出一组NNN个不同的正整数A1,A2,...,AnA_1,A_2,...,A_nA1,A2,...,An,它们的值在111到100000010000001000000之间
给定一个整数XXX,计算这样的数对个数(Ai,Aj)(A_i,A_j)(Ai,Aj),1<=i<j<=N1<=i<j<=N1<=i<j<=N并且Ai+Aj=XA_i+A_j=XAi+Aj=X
题目解析
对于每个数AiA_iAi判断是否有一个数等于X−AiX-A_iX−Ai
因为会有重复的,所以Ans/2Ans/2Ans/2即可
代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n,x,ans;
int a[1000005];
bool flag[1000005];
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]),flag[a[i]]=1;
scanf("%d",&x);
for(int i=1;i<=n;i++)
if(flag[x-a[i]])
ans++;
printf("%d",ans/2);
return 0;
}