为什么这个代码能ac:
#include <bits/stdc++.h>
using namespace std;
int a[1000010];
unordered_map<int,int>mp;
signed main()
{
long long res=0;
int n,c;
cin>>n>>c;
for (int i = 1; i <= n; i ++ ) cin>>a[i];
sort(a+1,a+n+1);
for (int i = 1; i <= n; i ++ )
{
int k=a[i]+c;
int l=i+1,r=n,mid;
while(l<r)
{
mid=(l+r)>>1;
if(a[mid]>=k) r=mid; else l=mid+1;
}
if(k==a[l])
mp[a[l]]++;
}
for (int i = 1; i <= n; i ++ ) if(mp[a[i]]>0) res+=mp[a[i]];
cout<<res;
}
这个代码只能ac第3个的样例:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[1000010];
unordered_map<int,int>mp;
signed main()
{
int n,c,res=0;
cin>>n>>c;
for (int i = 1; i <= n; i ++ ) cin>>a[i];
for (int i = 1; i <= n; i ++ )
{
int k=a[i]+c;
int l=i,r=n,mid;
while(l<r)
{
mid=(l+r)>>1;
if(a[mid]>=k) r=mid; else l=mid+1;
}
if(k==a[l])
mp[a[l]]++;
}
for (int i = 1; i <= n; i ++ ) if(mp[a[i]]>0) res+=mp[a[i]];
cout<<res;
}
这个代码能ac除第3个样例的所有样例:
#include <bits/stdc++.h>
using namespace std;
int a[1000010];
unordered_map<int,int>mp;
signed main()
{
int n,c,res=0;
cin>>n>>c;
for (int i = 1; i <= n; i ++ ) cin>>a[i];
sort(a+1,a+n+1);
for (int i = 1; i <= n; i ++ )
{
int k=a[i]+c;
int l=i+1,r=n,mid;
while(l<r)
{
mid=(l+r)>>1;
if(a[mid]>=k) r=mid; else l=mid+1;
}
if(k==a[l])
mp[a[l]]++;
}
for (int i = 1; i <= n; i ++ ) if(mp[a[i]]>0) res+=mp[a[i]];
cout<<res;
}