【7.9.2】分身数对
题目链接:http://oj.tfls.net/p/176
- 题解:如果使用双重循环来查找,本题要超时。用哈希表来处理,定义a[x]代表x这个数在数列中是否存在,1代表存在,0代表,只需扫描1~x/2,若数字存在,那么只需要检查看x减去这个数的结果是否在数列里
#include<bits/stdc++.h>
using namespace std;
const int max_n=2e6+10;
int a[max_n];
int main()
{
int n, x, s=0;
cin>>n;
for(int i=1; i<=n; i++){
cin>>x;
a[x]=1;
}
cin>>x;
for(int i=1; i<=x/2; i++)
if(a[i]==1 && a[x-i]==1 && x-i!=i)s++;
//如果i和x-i都有且不等于i, 就是一对分身数对
cout<<s;
return 0;
}