9.5 吉比特 游戏研发 AC1.5 求大佬第二题正解

第一题 字符串匹配问题

倒着匹配,就是起始点最大了

#include <iostream>
using namespace std;

int getRes(string& a, string& b) {
    int ind1 = a.size() - 1, ind2 = b.size() - 1;
    while(ind1 >=0 && ind2 >= 0) {
        if(a[ind1] == b[ind2])
            ind1--, ind2--;
        else ind1--;
    }
    return ind2 < 0 ? ind1+2 : 0;
}
int main() {
    string a, b;
    cin >> a >> b;
    int res = getRes(a, b);
    cout << res << endl;
    return 0;
}

第二题 修仙问题

无向图的遍历,不过我没有用到一个点可以经过两遍这个条件,默认只走一遍

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void dfs(vector<vector<pair<int,int>>>& grid, vector<int>& used, int cur, int sum, int count, int& res) {
    if(used[cur]++ == 0) count++;
    if(count == grid.size() - 1) {
        res = min(res, sum);
        return ;
    }
    if(used[cur] > 2) return ;

    for(int i=0; i<grid[cur].size(); i++)
        if(used[grid[cur][i].second] == 0) {
            sum += grid[cur][i].first;
            dfs(grid, used, grid[cur][i].second, sum, count, res);
        }
}

int main() {
    int n, m, x, y, c, res = 1e9;
    cin >> n >> m;
    vector<vector<pair<int,int>>> grid(n+1);
    for(int i=0; i<m; i++) {
        cin >> x >> y >> c;
        grid[x].push_back({c, y});
        grid[y].push_back({c, x});
    }
    for(int i=1; i<=n; i++) sort(grid[i].begin(), grid[i].end());

    for(int i=1; i<=n; i++) {
        vector<int> used(n+1, 0);
        dfs(grid, used, i, 0, 0, res);
    }
    if(res == 1e9) cout << -1 << endl;
    else cout << res << endl;

    return 0;
}
#吉比特##笔试题目##游戏研发工程师#
全部评论
第二题,是有向图的遍历? 题量也太大了
点赞 回复 分享
发布于 2019-09-05 22:05
第二题有没有Java的
点赞 回复 分享
发布于 2019-09-05 22:06
第二题没看懂
点赞 回复 分享
发布于 2019-09-05 22:08
选择题 填空题题量有点大 感到做崩了都
点赞 回复 分享
发布于 2019-09-05 22:08
第二题好像是改过的旅行家问题,允许经过两次,无向图。 然而我不会做zzz
点赞 回复 分享
发布于 2019-09-05 22:09
TSP问题 然后只允许经过两次。。
点赞 回复 分享
发布于 2019-09-05 22:13
好像找到了一个  类似的代码  https://blog.csdn.net/azheng51714/article/details/7773862
点赞 回复 分享
发布于 2019-09-05 22:16
求问大佬我这第一题的代码为啥只能过 50%🤣   public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         String[] arr = sc.nextLine().split(" ");         String S = arr[0];         String t = arr[1];         int res = subString(S, t);         System.out.println(res);     }     private static int subString(String S, String t){         int[] hash = new int[256];         for(int i = 0; i < S.length();i++)             hash[S.charAt(i)] = i + 1;         for(int i = 0; i < t.length(); i++){             if(hash[t.charAt(i)] == 0)                 return 0;         }         return hash[t.charAt(0)];     }
点赞 回复 分享
发布于 2019-09-05 22:23

相关推荐

04-04 10:56
门头沟学院 Java
点赞 评论 收藏
分享
Dream_coding:你是不是只投大厂了
点赞 评论 收藏
分享
02-22 21:16
已编辑
门头沟学院 运营
牛客928043833号:离了你谁还拿我当个宝
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务