社区讨论

关于省选的空间限制

学术版参与者 8已保存回复 10

讨论操作

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

当前回复
10 条
当前快照
1 份
快照标识符
@lo2ut5y7
此快照首次捕获于
2023/10/23 20:08
2 年前
此快照最后确认于
2023/10/23 20:08
2 年前
查看原帖
题目链接:P7519
评测结果:here
代码:here
问题概要:省选评测的时候,MLE 的标准是“开了多少空间”(不管用没用),还是“实际访问了多少空间”?

在做 2021 省选题的时候,我开了一个 long long 类型的数组 dp[8280][14][505],经过计算,这个数组占用的空间是 469MB。
但是运行结果显示,最大的一个点也只占用了 441MB 的空间。我猜测可能是因为有一些数组空间并没有被访问过,也就没有占用内存。
于是,我又交了几发 A+B,都是以下格式:
CPP
#include <bits/stdc++.h>
using namespace std;
int a,b,c[500005000];
int main()
{
    a=262764093,b=446679284;// 示例
    cin>>c[a]>>c[b];
    cout<<c[a]+c[b];
    return 0;
}
得到了以下的结果(C++11,均未开 O2):
aabb空间
1122808KB
115×1085\times10^8808KB
5×10815\times10^8-15×1085\times10^8808KB
2.5×1082.5\times10^82.5×108+12.5\times10^8+12.45KB
1×1081\times10^84×1084\times10^84.39MB
1.67×1081.67\times10^83.33×1083.33\times10^84.46MB
推测空间不仅与访问了多少内存有关,还与访问的位置有关(访问位置靠近头尾、间隔较小可能会省空间?)
但是,在 Lemon 等本地评测软件上,根据我们机房平时测试的经验,只要数组(全局变量)开的过大,就会MLE。 像上面的 A+B 测试,在本地早就爆 MLE 了。
所以想问一下大家,省选的空间限制是按照洛谷上这样,根据实际访问的大小来测算,还是像 Lemon 那样开多大空间算多大呢?
以及追问两个问题:
  1. O2 优化对空间有影响吗?如果有,更倾向于正优化还是负优化呢?
  2. vector 这样的 STL容器,在“开了但是没有填入数据”的时候会占用多少内存呢?比如我开了一个 vector<long long> e[2000200],但是只往里面放了 1e5 个数,实际占用空间会有多大呢?
问题较长,提前谢谢大家的理解与帮助 (^v^)

回复

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

正在加载回复...