#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】? 怀疑是栈溢出,却总看不出来【想哭】。