在 线 求 助 3 -- 为 什 么 MLE
查看原帖
在 线 求 助 3 -- 为 什 么 MLE
763339
lanchenhao2010楼主2022/8/11 12:24
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
int a[11][11];
int n;
void left(int &step_x,int &step_y){ // 左转。
    int n_st_x,n_st_y;
    if(step_x) n_st_x = 0;
    else n_st_x = step_y;
    if(step_y) n_st_y = 0;
    else n_st_y = 0 - step_x;
    step_x = n_st_x;
    step_y = n_st_y;
}
void next_xy(int &x,int &y,int &step_x,int &step_y){ // 获得新位置。
    int im_x = x + step_x;
    int im_y = y + step_y;
    if(im_x < 1 || im_x > n || im_y < 1 || im_y > n){
        left(step_x,step_y);
        next_xy(x,y,step_x,step_y);
    }
    else if(a[im_x][im_y]){
        left(step_x,step_y);
        next_xy(x,y,step_x,step_y);
    }
    else{
        x += step_x;
        y += step_y;
    }
}
int main(){
    memset(a,0,sizeof(a));
    int step = 1,x = 1,y = 1,step_x = 0,step_y = 1;
	cin >> n;
    while(step <= n * n){
        a[x][y] = step;
        next_xy(x,y,step_x,step_y);
        step++;
    }
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            int num = a[i][j];
            if(num >= 10){
                printf(" %d",num);
            }
            else{
                printf("  %d",num);
            }
        }
        printf("\n");
    }
	return 0;
}

提交后全MLE了。。。

测试点信息
74ms/125.00MB
MLE
#1
Memory Limit Exceeded.
73ms/125.00MB
MLE
#2
Memory Limit Exceeded.
74ms/125.00MB
MLE
#3
Memory Limit Exceeded.
72ms/125.00MB
MLE
#4
Memory Limit Exceeded.
73ms/125.00MB
MLE
#5
Memory Limit Exceeded.

开O2优化,变成TLE。。。

测试点信息
1.20s/808.00KB
TLE
#1
Time Limit Exceeded.
1.20s/692.00KB
TLE
#2
Time Limit Exceeded.
1.20s/808.00KB
TLE
#3
Time Limit Exceeded.
1.20s/808.00KB
TLE
#4
Time Limit Exceeded.
1.20s/684.00KB
TLE
#5
Time Limit Exceeded.

有大佬能告诉我为什么吗【跪 * 1000】? 怀疑是栈溢出,却总看不出来【想哭】。

2022/8/11 12:24
加载中...