度小满0920笔试2AC答案 基础架构研发工程师

两道比较常规的题,不过细节上还是要好好处理一下。本人代码比较粗糙,欢迎大家多多指教~
仅作交流,祝愿大家秋招顺利!
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <unordered_map>
#include <queue>
#include <math.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    vector<string> strings(n);
    for (int i = 0; i < n; i++)
    {
        cin >> strings[i];
    }

    vector<bool> flags(3);
    vector<char> par(3);
    int count = 0;
    for (auto str : strings)
    {
        if (str.length() % 3 != 0)
        {
            cout << "No" << endl;
            continue;
        }
        count = 0;
        for (int i = 0; i < 3; i++)
        {
            flags[i] = false;
            par[i] = str[i];
        }
        
        for (int i = 3; i < str.length(); i++)
        {
            if (str[i] == par[i % 3])
            {
                continue;
            }
            if (!flags[i % 3])
            {
                flags[i % 3] = true;
                count ++;
            }
        }
        if (count <= 1)
        {
            cout << "Yes" << endl;
        }
        else
        {
            cout << "No" << endl;
        }
        
    }

    return 0;
}
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int bfs(vector<string> grid)
{
    vector<vector<char>> direct{{1, 0}, {-1, 0}, {0, -1}, {0, 1}};
    queue<vector<int>> que_;
    int hei = grid.size();
    int wid = grid[0].length();
    int result = -1;
    vector<vector<int>> visited(hei, vector<int>(wid, -1));

    for (int i = 0; i < hei; i++)
    {
        for (int j = 0; j < wid; j++)
        {
            if (grid[i][j] == '@')
            {
                que_.push({i, j, 0});
                visited[i][j] = 0;
            }
        }
    }

    while (!que_.empty())
    {
        auto cur = que_.front();
        que_.pop();
        if (cur[0] == 0 || cur[0] == hei - 1 || cur[1] == 0 || cur[1] == wid - 1)
        {
            if (cur[2] < result || result == -1)
            {
                result = cur[2];
            }
            continue;
        }
        for (int i = 0; i < 4; i++)
        {
            int next_y = cur[0] + direct[i][0];
            int next_x = cur[1] + direct[i][1];
            int last_time = cur[2];
            if (visited[next_y][next_x] != -1 && visited[next_y][next_x] <= last_time + 1)
            {
                continue;
            }
            visited[next_y][next_x] = last_time + 1;
            if (grid[next_y][next_x] == '.')
            {
                que_.push({next_y, next_x, last_time});
            }
            else if (grid[next_y][next_x] == '*')
            {
                que_.push({next_y, next_x, last_time + 1});
            }
        }
    }

    return result;
}

int main()
{
    int t, n, m;
    cin >> t;
    vector<vector<string>> grids(t);
    for (int i = 0; i < t; i++)
    {
        cin >> n;
        cin >> m;
        grids[i].resize(n);
        for(int j = 0; j < n; j++)
        {
            cin >> grids[i][j];
        }
    }

    for (auto grid : grids)
    {
        cout << bfs(grid) << endl;
    }


    return 0;
}



#笔试题目##度小满#
全部评论

相关推荐

牛牛不会牛泪:脉脉太多这种了,纯水军
点赞 评论 收藏
分享
评论
3
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务