1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #include <iostream> #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define out cout << '\n'; #pragma GCC optimize("Ofast") using namespace std; int n, dir, arr[55][55]; void left(int *i,int *j){ *j = *j-1; cout << arr[*i][*j]; } void up(int * i,int * j){ *i = *i - 1; cout << arr[*i][*j]; } void right(int *i,int *j){ *j = *j+1; cout << arr[*i][*j];
} void down(int *i,int *j){ *i = *i+1; cout << arr[*i][*j]; } int main(){ IOS cin >> n; cin >> dir; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ cin >> arr[i][j]; } } int cnt = 0, step = 0, idx = 0, a = n/2, b = n/2; int n1, n2, n3, n4; switch(dir){ case 0: n1 = 1; n2 = 2; n3 = 3; n4 = 0; break; case 1: n1 = 0; n2 = 1; n3 = 2; n4 = 3; break; case 2: n1 = 3; n2 = 0; n3 = 1; n4 = 2; break; case 3: n1 = 2; n2 = 3; n3 = 0; n4 = 1; break; } cout << arr[a][b]; for(int i = 0;i < (n * n)-1;){ if(step % 2 == 0) cnt++; if(idx == n1){ for(int j = 0;j < cnt;j++){ if(i >= (n * n)-1) break; up(&a, &b); i++; } } if(idx == n2){ for(int j = 0;j < cnt;j++){ if(i >= (n * n)-1) break; right(&a, &b); i++; } } if(idx == n3){ for(int j = 0;j < cnt;j++){ if(i >= (n * n)-1) break; down(&a, &b); i++; } } if(idx == n4){ for(int j = 0;j < cnt;j++){ if(i >= (n * n)-1) break; left(&a, &b); i++; } } step++; if(idx == 3) idx = -1; idx++; } out return 0; }
|