获赞
82
粉丝
27
关注
2
看过 TA
21
东南大学
2020
C++
IP属地:上海
暂未填写个人简介
私信
关注
2019-09-21 17:26
已编辑
拼多多_推荐_算法工程师
第一题吃葡萄,考虑最小的两个和的2倍是否大于第三个,分两种情况就可以了。 第二题积木,第i堆时,当前积木大于等于0-i-1的和就行 第三题,从后向前记录能直达n的点为-1 然后,从前到后,遇到在k范围内的点有-1就是true。这个应该有更好的方法是按超能力次数dp,笔试的时候没想太多 第四题,逆序对变种,应该归并思想也能做吧可惜时间不够了。 总体不算难,题量有点大,前面有的笔误浪费太久了 晚上放代码
Blue5437:第三题: int main() {     int T;     cin >> T;     while (T--) {         int n, k;         cin >> n >> k;         vector<int> a(n);         for (int i = 0; i < n; i++)             cin >> a[i];         vector<int> dp(n, 0);         dp[n - 1] = -1;         for (int i = n - 2; i >= 0; i--) {             for (int j = min(n - 1, i + k); j > i; j--) {                 if (a[j] <= a[i] && dp[j] == -1) {                     dp[i] = -1;                     break;                 }             }         }         if (dp[0] == -1) {             cout << "YES" << endl;             continue;         }         for (int i = 0; i < n; i++)             cout << dp[i] << ' ';         cout << endl;         bool res = false;         dp[0] = 1;         for (int i = 1; i < n; i++) {             for (int j = max(0, i - k); j < i; j++) {                 if (dp[j] == 1) {                     if (dp[i] == -1) {                         res = true;                         break;                     }                     else if (a[j] >= a[i])                         dp[i] = 1;                 }             }             if (res == true)                 break;         }         if (res)             cout << "YES" << endl;         else             cout << "NO" << endl;     }     system("pause");     return 0; }
投递网易等公司9个岗位 >
0 点赞 评论 收藏
分享
2019-09-04 21:56
已编辑
拼多多_推荐_算法工程师
携程的笔试还比较简单,第一题列车时刻表,第二题auc,第三题旅游线路,一小时结束&nbsp;第一题,两次遍历,第一次统计字母个数,第二次维护cur&nbsp;和&nbsp;tar,cur表示当前字母个数,tar表示目标个数(例如已包含a,则全部a都要包含),cur==tar时划分并清0&nbsp;第二题,auc有标准计算方式&nbsp;第三题,NP难问题,所以递归回溯所有情况即可,注意n==1的情况&nbsp;楼下放代码
p0p0p:#当时没有考虑n==1的情况,以及判断没有路径的情况, 只有63% #不知道现在加上能不能ac def dfs(res,num,fg,i,cnt):     if sum(fg) == 2 and fg[0] == 1 and  num[i][0] != -1:  #只剩两个城市 ,起点还未到达, 且可以返回起点         res.append(cnt+num[i][0])         return      if fg[0] == 0:      #无法回到起点,起点被遍历两遍         return     for kk in range(n):         if num[i][kk] != -1 and fg[kk] > 0: #有路且去向城市未访问过             fg[i] -= 1             dfs(res,num,fg,kk,cnt+num[i][kk])  #             fg[i] += 1     return   n = int(input()) if n ==1:        #考虑n==1的情况     print(0) else:     m = int(input())     num =[[ -1 for i in range(n)] for j in range(n)]     for k in range(m):  #构造邻接矩阵         i,j,d = [int(tmp) for tmp in input().split(' ')]         num[i][j] = d         num[j][i] = d     fg = [1]*n         #改点是否访问标志     fg[0] = 2     #起点需访问两遍     res = []     dfs(res,num,fg,0,0)     if len(res) == 0: #考虑没有路径的情况         print(-1)     else:         print(min(res))
投递携程等公司9个岗位 >
0 点赞 评论 收藏
分享
2019-07-28 20:48
已编辑
拼多多_推荐_算法工程师
第一题比较简单,找出a[idx]&nbsp;&gt;&nbsp;a[idx+1]的位置,先判断能不能改idx+1,再判断能不能改idx(改idx+1更大),都不能就输出NO。&nbsp;第二题哈希表存储每个字母在字符串头尾的数量,最后遍历26个字母,有奇数的就false&nbsp;第三题想明白就比较简单,主要思想是可以完成的任务中优先完成时间短的(保证平均等待短),这部分用优先队列就可以(堆)。然后依赖关系用计个数就可以了,新的加到队列中&nbsp;第四题暴力方法就是直接递归,拿不拿每个积木,这样只能40%。结束后感觉应该可以dp求解,类似一个变种的二约束背包问题。&nbsp;楼下放代码
Blue5437:第三题 typedef struct node {     int x, y;     friend bool operator <(node a, node b) {         if (a.x == b.x)             return a.y > b.y;         else             return a.x > b.x;     }     node(int a, int b) {         x = a;         y = b;     } }; int main() {     priority_queue<node> q;     int n, m;     cin >> n >> m;     vector<int> need_time(n + 1);     for (int i = 1; i <= n; i++)         cin >> need_time[i];     vector<vector<int>> depen(n + 1);     vector<int> de_nums(n + 1, 0);     for (int i = 0; i < m; i++) {         int a, b;         cin >> a >> b;         de_nums[b]++;         depen[a].push_back(b);     }     for (int i = 1; i <= n; i++)         if (de_nums[i] == 0)             q.push(node(need_time[i], i));     vector<int> res;     while (!q.empty()) {         int y = q.top().y;         res.push_back(y);         q.pop();         for (int i = 0; i < depen[y].size(); i++) {             de_nums[depen[y][i]]--;             if (de_nums[depen[y][i]] == 0)                 q.push(node(need_time[depen[y][i]], depen[y][i]));         }     }     for (int i = 0; i < res.size(); i++)         cout << res[i] << ' ';     cout << endl;     system("pause");         return 0; }
投递拼多多集团-PDD等公司9个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务