这道题可以巧妙使用map映射解决,因为给出了c,要在数组里找a-b=c,可以转化为成a-c=b,只要a 在数组里,同时a对应的b也在数组里就可以组成一对,所以和a对的b的map映射出现几次就有几对 。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[200010];
map<ll,ll> mp;
int main(){
ll b,c,sum=0;
cin>>b>>c;
for(int i=0;i<b;i++){
cin>>a[i];
mp[a[i]]++;
a[i]=a[i]-c;
}
for(int i=0;i<b;i++){
sum=sum+mp[a[i]];
}
cout<<sum<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[1010],b;
map<ll,ll> mp;
int main(){
cin>>b;
for(int i=1;i<=b;i++){
cin>>a[i];
}
for(int i=1;i<=b;i++)
for(int j=i;j<=b;j++)
mp[a[i]+a[j]]++;
for(int i=1;i<=b;i++)
for(int j=i;j<=b;j++){
if(mp[a[i]-a[j]]>=1||mp[a[j]-a[i]]>=1){
cout<<"Yes"<<endl;
return 0;
}
}
cout<<"No"<<endl;
return 0;
}