zoukankan      html  css  js  c++  java
  • 字节跳动游戏开发岗题目

    好久不打代码,有点菜

    昨天有两个题xjb写,不分析直接跑火车,现在回忆下写一下

    请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。大概就是这样一个剑指offer的题目
    这个必须要dfs遍历所有情况,也就是分一下'*'和'.'然后匹配的问题,而且还有'*'之后还是'.',然后其中有一项成立就满足,如果不可选有一项不成立就是不成立

    代码没有经过测试

    #include <bits/stdc++.h>
    using namespace std;
    string s, t;
    int l1, l2;
    bool dfs(int cur1, int cur2)
    {
        if (s[cur1] == 0 && t[cur2] == 0)
            return true;
        if (s[cur1] && t[cur2] == 0)
            return false;
        if (t[cur2 + 1] == '*')
        {
    
            if (s[cur1])
                return dfs(cur1, cur2 + 2);
            else
            {
                if (s[cur1] == t[cur2] || s[cur1] && t[cur2] == '.')
                    return dfs(cur1 + 1, cur2 + 2) ||
                           dfs(cur1 + 1, cur2) ||
                           dfs(cur1, cur2 + 2);
                else
                    dfs(cur1, cur2 + 2);
            }
        }
        if (s[cur1] == t[cur2] || s[cur1] && t[cur2] == '.')
            return dfs(cur1 + 1, cur2 + 1);
        return false;
    }
    int main()
    {
        cin >> s >> t;
        if (dfs(0, 0))
            cout << "YES
    ";
        else
            cout << "NO
    ";
    }

    还有一个连连看消除的

    代码依旧没有经过测试

    这个就是直连,拐个弯连,拐两个弯连接,笔试时依旧觉得写起来比较复杂,模拟题一般都给队友了,我对细节处理有时候挺糟的吧

    现在想想,我不一定非要写3个枚举去判断,我可以bfs记录走到哪个位置,拐了几个弯和现在方向,初始自己搞一下就行

    #include <bits/stdc++.h>
    using namespace std;
    struct T
    {
        int x, y, turn, step;
    } tmp;
    
    int n, m, a[55][55];
    int dx[4] = {1, 0, 0, -1};
    int dy[4] = {0, 1, -1, 0};
    int ax, ay, ex, ey;
    int bfs()
    {
        queue<T> Q;
        Q.push({ax, ay, -1, -1});
        while (!Q.empty())
        {
            tmp = Q.front();
            Q.pop();
            //cout << "debug: " << tmp.x << " " << tmp.y << " " <<tmp.step<<"
    ";
            if (tmp.step > 2)
                continue;
            if (tmp.x == ex && tmp.y == ey && tmp.step >= 0 && tmp.step <= 2)
                return 1;
            for (int i = 0; i < 4; i++)
            {
                int tx = tmp.x + dx[i], ty = tmp.y + dy[i];
                //cout << "debug2: " << i << " " << tx << " " << ty << "
    ";
                if (tx == ex && ty == ey)
                {
                    //cout<<"End!!!
    ";
                }
                else if (tx == 0 || ty == 0 || tx > n || ty > m || a[tx][ty] 
                || i + tmp.turn == 3)
                    continue;
                Q.push({tx, ty, i, tmp.step + (i != tmp.turn)});
            }
        }
        return 0;
    }
    int main()
    {
        while (cin >> n >> m)
        {
            if (n == 0 && m == 0)
                break;
            for (int i = 1; i <= n; i++)
                for (int j = 1; j <= m; j++)
                {
                    cin >> a[i][j];
                }
            int q;
            cin >> q;
            while (q--)
            {
                cin >> ax >> ay >> ex >> ey;
                if (a[ax][ay] != a[ex][ey] || a[ax][ay] == 0 || a[ex][ey] == 0)
                    printf("NO
    ");
                else
                {
                    if (bfs())
                        printf("YES
    "), a[ax][ay] = a[ex][ey] = 0;
                    else
                        printf("NO
    ");
                }
            }
        }
    }
  • 相关阅读:
    实战分享 | 你知道这个死锁是怎么产生的吗?
    HDU 3016 线段树区间更新+spfa
    POJ 2828 线段树(想法)
    POJ 2184 01背包+负数处理
    HDU 2955 01背包(思维)
    HDU 1171 背包
    HDU 1561 树形DP入门
    POJ 3694 tarjan 桥+lca
    POJ 2446 最小点覆盖
    POJ 2226 最小点覆盖(经典建图)
  • 原文地址:https://www.cnblogs.com/BobHuang/p/11116323.html
Copyright © 2011-2022 走看看