社区讨论
同样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 条回复,欢迎继续交流。
正在加载回复...