文远知行30号笔试

三个都是简单题……但是第三个我死活有bug也是……
第一个 类似不同路径那个题,优先消耗小的路径,一样消耗就优先收益大的路径,我写的非常冗余,写的时候只想着赶紧调通完事……
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;

void helper(vector<vector<pair<int, int>>>& grids, int& max_profit, int& min_cost) {
  int rows = grids.size();
  if(rows == 0)
    return;
  int cols = grids[0].size();
  if(cols == 0)
    return;

  vector<vector<pair<int, int>>> dp(rows, vector<pair<int, int>>(cols, make_pair(0, 0)));
  dp[0][0] = make_pair(grids[0][0].first, grids[0][0].second);
  for(int i = 1; i < rows; ++i) {
    dp[i][0].first += dp[i - 1][0].first + grids[i][0].first;
    dp[i][0].second += dp[i - 1][0].second + grids[i][0].second;
  }
  for(int i = 1; i < cols; ++i) {
    dp[0][i].first += dp[0][i - 1].first + grids[0][i].first;
    dp[0][i].second += dp[0][i - 1].second + grids[0][i].second;
  }

  for(int i = 1; i < rows; ++i) {
    for(int j = 1; j < cols; ++j) {
      if(dp[i - 1][j].first < dp[i][j - 1].first) {
        dp[i][j].first = dp[i - 1][j].first + grids[i][j].first;
        dp[i][j].second = dp[i - 1][j].second + grids[i][j].second;
      }  else if(dp[i - 1][j].first > dp[i][j - 1].first) {
        dp[i][j].first = dp[i][j - 1].first + grids[i][j].first;
        dp[i][j].second = dp[i][j - 1].second + grids[i][j].second;
      } else {
        dp[i][j].first = dp[i - 1][j].first + grids[i][j].first;
        dp[i][j].second = max(dp[i - 1][j].second, dp[i][j - 1].second) + grids[i][j].second;
      }
    }
  }
  min_cost = dp[rows - 1][cols - 1].first;
  max_profit = dp[rows - 1][cols - 1].second;
  return;
}

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

  int max_profit = 0, min_cost = 0;
  helper(grids, max_profit, min_cost);
  cout << min_cost << " " <<  max_profit << endl;
}
第二个,厉害的人应该有更好的解法吧,我就是列了个表,空间换时间

#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>

using namespace std;

void gettable(vector<vector<int>>& t) {
  for(int i = 0; i < 26; ++i) {
    for(int j = 1; j <= 26; ++j) {
      int tmp = (i + j) % 26;
      t[i + 'a'][j] = 'a' + tmp;
    }
  }
  return;
}

int main() {
  int n;
  cin >> n;
  vector<vector<int>> t(128,vector<int>(27, -1));
  gettable(t);
  while (n--) {
    char c;
    long step = 0, time = 0;
    cin >> c >> step >> time;
    step = step % 26;
    if(step != 0) {
       time = time % (26 * step);
       for(int i = 0; i < time; ++i) {
        c = t[c][step];
      }
    }
    cout << c << endl;
  }
  return 0;
}

第三题,菜鸡暴躁,无向图,要求也不复杂,写完硬是测不过,放弃了。

#笔试题型##文远知行#
全部评论
同,第三题说我数组可能越界,有点懵,只过了16%
点赞 回复
分享
发布于 2020-08-30 21:18
楼主投的啥岗位?
点赞 回复
分享
发布于 2020-08-30 21:20
小红书
校招火热招聘中
官网直投
我T3写了个有bug的代码过了... 感觉测试用例不强。。
点赞 回复
分享
发布于 2020-08-30 21:44

相关推荐

点赞 评论 收藏
转发
点赞 8 评论
分享
牛客网
牛客企业服务