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;
}
写的有点复杂,直接莽的。。。
#笔试题目##笔经#
