3.14 阿里研发笔试最后一题
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; char mat[10][10]; char str[10][maxn]; int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; int px[10]; bool check(int x, int y) { return x >= 0 && x < 8 && y >= 0 && y < 8; } void dfs(int x, int y, char val, int &res) { mat[x][y] = 0; res ++; for (int i = 0; i < 4; ++ i) { int nx = x + dir[i][0]; int ny = y + dir[i][1]; if (check(nx, ny) && mat[nx][ny] == val) dfs(nx, ny, val, res); } return ; } signed main() { ios::sync_with_stdio(0), cin.tie(0); int n; cin >> n; for (int i = 0; i < 8; ++ i) cin >> mat[i]; for (int i = 0; i < 8; ++ i) cin >> str[i]; memset(px, 0, sizeof px); for (int i = 0; i < n; ++ i) { int x, y, res = 0; char op; cin >> x >> y >> op; x --; y --; dfs(x, y, mat[x][y], res); cout << res << '\n'; if (op == 'w') { for (int i = 0; i < 8; ++ i) { for (int j = 0; j < 8; ++ j) { if (mat[i][j] == 0) { bool flag = 0; for (int k = i + 1; k < 8; ++ k) { if (mat[k][j] != 0) { swap(mat[i][j], mat[k][j]); flag = 1; break; } } if (!flag) mat[i][j] = str[j][px[j] ++]; } } } } else if (op == 's') { for (int i = 7; i >= 0; -- i) { for (int j = 0; j < 8; ++ j) { if (mat[i][j] == 0) { bool flag = 0; for (int k = i - 1; k >= 0; -- k) { if (mat[k][j] != 0) { swap(mat[i][j], mat[k][j]); flag = 1; break; } } if (!flag) mat[i][j] = str[j][px[j] ++]; } } } } else if (op == 'a') { for (int i = 0; i < 8; ++ i) { for (int j = 0; j < 8; ++ j) { if (mat[i][j] == 0) { bool flag = 0; for (int k = j + 1; k < 8; ++ k) { if (mat[i][k] != 0) { swap(mat[i][k], mat[i][j]); flag = 1; break; } } if (!flag) mat[i][j] = str[i][px[i] ++]; } } } } else { for (int i = 0; i < 8; ++ i) { for (int j = 7; j >= 0; -- j) { if (mat[i][j] == 0) { bool flag = 0; for (int k = j - 1; k >= 0; -- k) { if (mat[i][k] != 0) { swap(mat[i][k], mat[i][j]); flag = 1; break; } } if (!flag) mat[i][j] = str[i][px[i] ++]; } } } } } return 0; }
写的有点复杂,直接莽的。。。
#笔试题目##笔经#