설명은 일단 귀찮으니 다음에
일단 코드만
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include <cstdio> #include <vector> #include <queue> #include <cstring> using namespace std; int n,ans,ret, first_x, first_y; int mX[] = {-1, 1, 0, 0}, mY[] = {0, 0, -1, 1},MAP[101][101], rev[] = {1,0,3,2}; int change_dir[6][4] = { {0,0,0,0}, {1,3,0,2}, {3,0,1,2}, {2,0,3,1}, {1,2,3,0}, {1,0,3,2} }; vector<pair<int, int > >V[5]; queue<pair<int, int > >Q; void solve(int x, int y, int dir) { while(1) { int nx = x + mX[dir], ny = y + mY[dir]; if(1<= MAP[nx][ny] && MAP[nx][ny]<=5) { ret++; dir = change_dir[MAP[nx][ny]][dir]; } if(6 <= MAP[nx][ny] && MAP[nx][ny] <= 10) { for(int i=0;i<V[MAP[nx][ny]-6].size(); i++) { if(V[MAP[nx][ny]-6][i].first != nx || V[MAP[nx][ny]-6][i].second != ny) { x = V[MAP[nx][ny]-6][i].first; y = V[MAP[nx][ny]-6][i].second; break; } } continue; } if(nx<1||ny<1||nx>n||ny>n) { ret++; dir = rev[dir]; } x = nx, y = ny; if(x == first_x && y == first_y) return; if(MAP[x][y]==-1) return; } } int main() { // ios_base::sync_with_stdio(0); // cin.tie(0); // cout.tie(0); int tc; scanf("%d", &tc); for(int t=1;t<=tc;t++) { memset(MAP, -2, sizeof(MAP)); scanf("%d", &n); ans = 0; for(int i=0;i<5;i++) V[i].clear(); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d", &MAP[i][j]); if(MAP[i][j] >= 6 && MAP[i][j] <=10) V[MAP[i][j]-6].push_back(make_pair(i,j)); else if(MAP[i][j] == 0) Q.push(make_pair(i,j)); } } while(!Q.empty()) { int x = Q.front().first; int y = Q.front().second; first_x = x; first_y = y; Q.pop(); for(int i=0;i<4;i++) { ret = 0; solve(x,y,i); ans = ret > ans ? ret : ans; } } printf("#%d %d\n", t, ans); } return 0; } | cs |
9700. USB 꽂기의 미스터리 D3 (3) | 2020.03.25 |
---|---|
9658. 유효숫자 표기 D3 (0) | 2020.03.11 |
9611. 명진이와 동휘의 숫자 맞추기 D4 (0) | 2020.03.08 |
3752. 가능한 시험 점수 D4 (0) | 2020.01.18 |
2819. 격자판의 숫자 이어 붙이기 D4 (0) | 2020.01.17 |
댓글 영역