社区讨论

同样map,为什么我MLE?

P1102A-B 数对参与者 6已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@m32s5rb8
此快照首次捕获于
2024/11/04 16:49
去年
此快照最后确认于
2025/11/04 15:24
4 个月前
查看原帖
这是我自己第一遍手写的代码:
CPP
#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, 看了网上视频修改以后是这样的:
CPP
#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 做,内存能差这么多?我第一遍的代码错在哪了??
球球大佬解惑

回复

7 条回复,欢迎继续交流。

正在加载回复...