滴滴暑期实习笔试思路(AK)

第一题:

刚开始想着像二分图, 结果发现自己不会写 二分图了... 就先去做第二题了, 结果做完第二题回来暴力骗分的时候发现, woc AC 了... 后台数据有点水了说实话..或者说入 vector 的要求会剪掉很多枝所以时间复杂度是可以过 ? 如果有大佬会非 dfs 做法来浇一下蒟蒻
AC 代码(大雾)

#include <bits/stdc++.h>

using namespace std;

const int N = 5e2 + 5;

int n, a[N];

bool flag;

void dfs(int n, vector<int>& gt, vector<int>& ls, int dep)
{
    if (flag) return ;
    if (dep == n + 1) {
        flag = 1; return ;
    }
    if (ls.empty() || a[dep] < ls.back())
    { ls.push_back(a[dep]); dfs(n, gt, ls, dep + 1); ls.pop_back(); }
    if (gt.empty() || a[dep] > gt.back())
    { gt.push_back(a[dep]); dfs(n, gt, ls, dep + 1); gt.pop_back(); }
    return ;
}

void solve()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    flag = 0;
    vector<int>gt, ls;
    dfs(n, gt, ls, 1);
    if (flag) cout << "Yes" << endl;
    else cout << "No" << endl;
}

int main()
{
    int T; cin >> T;
    while (T--) solve();
    return 0;
}

第二题简单模拟就行了, 就是被卡细节了, 编译器还卡在 wsl 出不来了.. 心态爆炸...

#include <bits/stdc++.h>

using namespace std;

int main()
{
  string s; cin >> s;
  int n; cin >> n;
  string res;
  while (n--)
  {
    string t1, t2; 
    cin >> t1 >> t2;
    int l = s.size(), i = 0;
    for (i = 0; i + t1.size() - 1 < s.size(); i++)
    {
      string tmp;
      for (int j = 0; j < t1.size(); j++)
        tmp += s[i + j];
      if (tmp == t1) res += t2, i += t1.size() - 1;
      else res += tmp[0];
    }
    for (int j = i; j < s.size(); j++)
      res += s[j];
    if (n >= 1) s = res, res = "";
  }
  cout << res << endl;
  return 0;
}
#滴滴笔试##暑期实习#
全部评论
这个哪个岗位的题,我是测开,编程题和你的不一样
点赞 回复 分享
发布于 2022-06-11 20:45
岗位是 golang 实习生
点赞 回复 分享
发布于 2022-06-11 20:47
楼主第二题做出来了吗?
点赞 回复 分享
发布于 2022-06-11 20:51
func main() { var dfs func(nums []int, preUp, preDown, cur, n int) flag := false dfs = func(nums []int, preUp, preDown, cur, n int) { if flag { return } if cur == n { flag = true return } if nums[cur] > preUp { dfs(nums, nums[cur], preDown, cur+1, n) } if nums[cur] < preDown { dfs(nums, preUp, nums[cur], cur+1, n) } } var T int var n int fmt.Scanf("%d", &T) for i := 0; i < T; i++ { fmt.Scanf("%d", &n) nums := make([]int, n) for i := 0; i < n; i++ { fmt.Scanf("%d", &nums[i]) } flag = false dfs(nums, -1, 501, 0, n) if flag { fmt.Println("Yes") } else { fmt.Println("No") } } } 铁子 我这第一题咋不对啊
点赞 回复 分享
发布于 2022-06-11 20:54
第一题想半天没想出来,早知道也暴力了😂,感觉笔试要无了,就这题烦人
点赞 回复 分享
发布于 2022-06-11 21:18
呜呜,第一题我和你逻辑基本一样,不过就是不知道为什么过不了oj,本地都能过,不知道是不是输入输出的问题
点赞 回复 分享
发布于 2022-06-11 21:37
同卡着出不来,心态炸了
点赞 回复 分享
发布于 2022-06-11 22:54

相关推荐

宇智波爱学习:我还没收到笔试
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
评论
4
2
分享
牛客网
牛客企业服务