同样map,为什么我MLE?
查看原帖
同样map,为什么我MLE?
1251853
linglu1YGking楼主2024/11/4 16:49

这是我自己第一遍手写的代码:

#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 做,内存能差这么多?我第一遍的代码错在哪了??

球球大佬解惑

2024/11/4 16:49
加载中...