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;
}#吉比特##笔试题目##游戏研发工程师#
查看1道真题和解析