在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题


I AM GETTING MLE ERROR. Please suggest strategies to avoid this error. I am getting the correct answer though.

问题-问题班尼刚刚买了一个新的可编程机器人。为了测试自己的编码技能,他将机器人放在一个带有R行(从北到南编号为1到R(和C列(从西到东编号为1到C(的正方形网格中。第 r 行和 c 列中的正方形表示为 (r, c(。

最初,机器人从正方形(SR,SC(开始。班尼会给机器人N个指令。每条指令是N,S,E或W之一,指示机器人分别向北,向南,向东或向西移动一个正方形。

如果机器人移动到它之前进入的正方形,机器人将继续沿同一方向移动,直到它到达以前没有进入过的正方形。班尼永远不会给机器人一个指令,导致它移出电网。

你能帮助班尼在按照N个指令完成机器人的方块吗?

输入 输入的第一行给出测试用例的数量,T.T测试用例紧随其后。每个测试用例都以一行开头,分别包含五个整数 N、R、C、SR 和 SC、指令数、行数、列数、机器人的起始行和起始列。

然后,接下来是另一行,包含N个字符的单个字符串;这些字符的第i个是Banny给机器人的第i条指令(如上所述,N,S,E或W之一(。

输出 对于每个测试用例,输出一行包含案例 #x:r c,其中 x 是测试用例编号(从 1 开始(,r 是机器人完成的行,c 是机器人完成的列。

限制 内存限制:1GB。 1 ≤ T ≤ 100。 1 ≤ R ≤ 5 × 104. 1 ≤ C ≤ 5 × 104. 1 ≤ SR ≤ R. 1 ≤ SC ≤ C. 这些指令不会导致机器人移出网格。

测试集 1(可见( 时间限制:20秒。 1 ≤ N ≤ 100。

测试集 2(隐藏( 时间限制:60秒。 1 ≤ N ≤ 5 × 104.

样本

输入

输出

3 5 3 6 2 3 峨壹峨 4 3 3 1 1 塞斯 11 5 8 3 4 NEESSWWNESE

案例#1:3 2 案例#2:3 3 案例#3:3 7

**CODE -**
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
void trace_pos(vector<vector<int> >a,string s,int n,int r,int c,int t){
for(int i = 0;i < n;i++){
if(s[i] == 'N'){
while(a[r][c] == 1){
r--;
}
a[r][c] = 1;
}
if(s[i] == 'S'){
while(a[r][c] == 1){
r++;
}
a[r][c] = 1;
}
if(s[i] == 'W'){
while(a[r][c] == 1){
c--;
}
a[r][c] = 1;
}
if(s[i] == 'E'){
while(a[r][c] == 1){
c++;
}
a[r][c] = 1;
}
}
r = r + 1;
c = c + 1;
cout<<"Case #"<<t<<": "<<r<<" "<<c<<endl;
}
int main(){
int t,q = 1;
scanf("%d",&t);
while(q <= t){
int n,x,y,r,c;
//char s[100];
string s;
cin>>n>>x>>y>>r>>c;
r = r - 1;
c = c - 1;
cin>>s;
//scanf("%s",s);
//scanf("%d%d%d%d%d",n,x,y,r,c);
vector<vector<int> >a(x,vector<int> (y,0));
a[r][c] = 1;
trace_pos(a,s,n,r,c,q);
q++;
}
return 0;
}

您正在获得 MLE,因为您超出了内存限制。我假设你在编写约束时犯了一个错误。我认为大案子的极限是1 <= N, R, C <= 5*10^4.因此,在最坏的情况下,您声明的是大小为5*10^4 * 5*10^4的 2D 向量,该向量25*10^8大约需要 10 GB 的内存。我认为这个问题不允许你这么多的记忆(没有比赛问题允许你这样做,据我所知(。

最新更新