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;
}


写的有点复杂,直接莽的。。。
#笔试题目##笔经#
全部评论
1
送花
回复 分享
发布于 2022-03-14 21:06
大佬啊,中间的处理挺巧妙的,这么短时间能写出来,佩服
点赞
送花
回复 分享
发布于 2022-03-14 21:21
现代汽车中国前瞻数字研发中心
校招火热招聘中
官网直投

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务