这是我自己第一遍手写的代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,c;
ll ans=0;
int main(){
cin>>n>>c;
int max1=-999;
map<int,int> m;
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
m[x]++;
max1=max(x,max1);
}
for(int i=0;i<=max1-c;i++){
ans=ans+(ll)m[i]*m[i+c];
}
cout<<ans;
return 0;
}
但是只有92分,有200w数据的那个测试点爆我MLE, 看了网上视频修改以后是这样的:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
int n,c,x,a,b;
ll ans=0;
map<int,int> m;
cin>>n>>c;
for(int i=0;i<n;i++){
scanf("%d",&x);
m[x]++;
}
map<int,int>::iterator it;
for(it=m.begin();it!=m.end();it++){
a=it->first;
b=a+c;
if(m.count(b))
ans+=(ll)m[a]*m[b];
}
cout<<ans;
return 0;
}
神奇的是这样就AC了,而且那个200w数据的测试点仅用了不到10MB空间。
问:为什么同样是用 map 做,内存能差这么多?我第一遍的代码错在哪了??
球球大佬解惑