I AM GETTING MLE ERROR. Please suggest strategies to avoid this error. I am getting the correct answer though.
问题-问题Banny刚买了一个新的可编程机器人。为了测试他的编码技能,他将机器人放置在一个正方形的网格中,该网格具有R行(从北到南从1到R)和C列(从西到东从1到C)。 r行和c列中的正方形表示为(r,c)。
最初,机器人从正方形(SR,SC)开始。 Banny将给机器人N条指令。每个指令都是N,S,E或W中的一个,指令机器人分别向北,向南,向东或向西移动一个正方形。
如果机器人移动到之前所在的正方形,则机器人将继续以相同的方向移动,直到到达之前未到达的正方形。 Banny永远不会给机器人发出指令,以使其离开网格。
您可以按照N指令帮助Banny确定机器人将在哪个方块中完成?
输入输入的第一行给出了测试用例的数量,T。每个测试用例都从一行开始,该行分别包含五个整数N,R,C,SR和SC,指令数,行数,列数,机器人的起始行和起始列。
然后,下一行包含N个字符的单个字符串;这些字符的第i个字符是Banny给机器人的第i个指令(如上所述,N,S,E或W中的一个)。
输出对于每个测试用例,输出包含Case #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。
样本
输入
输出
35 3 6 2 3脑电图4 3 3 1 1SESE11 5 8 3 4NEESSWWNESE
案例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的内存。我认为这个问题并不能给您那么多的记忆(据我所知,没有竞赛问题可以让您有这么多的记忆)。