3-26阿里笔试统计


#阿里巴巴#
全部评论
第二题没来得及看,有人知道是什么吗
1 回复 分享
发布于 2021-03-26 20:03
第一题双指针 第二题目做法复杂度爆炸,想不出来更好的: if __name__ == '__main__&(688)#39;:     n = int(input())     mat = [[0x3f3f3f3f for _ in range(n + 1)] for _ in range(n + 1)]     for i in range(n + 1):         mat[i][i] = 0     for _ in range(1, n):         a, b, c = list(map(int, input().split()))         mat[a][b] = c         mat[b][a] = c     for i in range(n + 1):         for j in range(n + 1):             for k in range(n + 1):                 if mat[i][k] + mat[k][j] < mat[i][j]:                     mat[i][j] = mat[i][k] + mat[k][j]     li_a = list(map(int, input().split()))[1:]     li_b = list(map(int, input().split()))[1:]     li_c = list(map(int, input().split()))[1:]     result = []     for a in li_a:         for b in li_b:             for c in li_c:                 result.append((mat[a][b] + mat[b][c] + mat[a][c]) / 2)     num = len(result)     print(sum(result) / num)
1 回复 分享
发布于 2021-03-26 20:07
第一题直接以0作为分割点,作字符串切割,统计相邻两个片段的长度和取最大即可,另外处理一下全为1的字符串,居然就能A了😂
1 回复 分享
发布于 2021-03-26 20:25
第一题Leetcode上有类似的,是一道简单题。 第二题如果有人找到类似的题的话,希望贡献一下链接。 https://leetcode-cn.com/problems/reverse-bits-lcci/
1 回复 分享
发布于 2021-03-26 20:31
第二题应该是个n^2的算法,第一是求树的最短路径,不能直接用多源最短路径算法,那玩意儿n^3,这里求的话,(假想节点a为根结点,然后求各点深度,也就是距离了)。然后对于任意三点,a,b,c;假设最优点是T,那么其实距离和T无关,应该是ab,bc,ac的最短距离的和除以二。问题是怎么把三重循环求和拆开,变成二重循环
1 回复 分享
发布于 2021-03-26 20:53
只A了第一道。。。。 第二道想了半天打算用暴力,没时间了。。。。。。
点赞 回复 分享
发布于 2021-03-26 19:57
求题目
点赞 回复 分享
发布于 2021-03-26 20:03
第一体100% if __name__ == '__main__&(688)#39;:     cse = int(input())     for _ in range(cse):         n = int(input())         li = list(map(int, input().split()))         cnt_0 = 0         cnt_1 = 0         p1 = 0         p2 = 0         result = 0         flag_all_1 = True         for e in li:             if e == 0:                 flag_all_1 = False                 break         while p1 < n:             if cnt_0 <= 1 and p2 < n:                 if li[p2] == 0:                     p2 += 1                     cnt_0 += 1                 else:                     p2 += 1                     cnt_1 += 1             else:                 if li[p1] == 0:                     cnt_0 -= 1                 else:                     cnt_1 -= 1                 p1 += 1             if cnt_1 > result:                 result = cnt_1         print(result if not flag_all_1 else result - 1)
点赞 回复 分享
发布于 2021-03-26 20:17
第二题暴力。没分 n = int(input()) edges = [] matrix = [[float('inf&(835)#39;)]*n for i in range(n)] for i in range(n-1):     edge = [int(i) for i in input().split()]     matrix[edge[0]-1][edge[1]-1]=edge[2]     matrix[edge[1]-1][edge[0]-1]=edge[2] for i in range(n):     matrix[i][i] = 0 for i in range(n):     for j in range(n):         for  k in range(n):             matrix[i][j]=min(matrix[i][j],matrix[i][k]+matrix[k][j]) nodelike = [] for i in range(3):     nums = [int(i) for i in input().split()]     nodelike.append(nums[1:]) res = 0 for i in nodelike[0]:     for j in nodelike[1]:         for k in nodelike[2]:             onemin = float('inf&(835)#39;)             for z in range(n):                 onemin = min(onemin,matrix[i-1][z]+matrix[j-1][z]+matrix[k-1][z])             res += onemin print(res/(len(nodelike[0])*len(nodelike[1])*len(nodelike[2])))
点赞 回复 分享
发布于 2021-03-26 20:22
第一题AC(C++): # #include <vector> # #include <iostream> # #include <algorithm> using namespace std; void readCardCount(int n, vector<int> &cardCount) {     cardCount.push_back(0);     for (int i = 0; i < n; i++) {         int card;         cin >> card;         if (card == 0) {             cardCount.push_back(0);         } else {             ++cardCount.back();         }     } } int maxCardLength(const vector<int> &cardCount) {     int theMax = cardCount[0] - 1;     for (int i = 1; i < cardCount.size(); i++) {         theMax = max(theMax, cardCount[i - 1] + cardCount[i]);     }     return theMax; } int main() {     int total_count;     cin >> total_count;     for (int i = 0; i < total_count; i++) {         int n;         cin >> n;         vector<int> cardCount;         readCardCount(n, cardCount);         cout << maxCardLength(cardCount) << endl;     } } 第二题给我干蒙了,感觉应该是DP或者贪心一类的东西,但是完全没有思路,那个4*10⁵暴力根本不可能过。
点赞 回复 分享
发布于 2021-03-26 20:27
有没有第二题得分的大佬给个思路呀。
点赞 回复 分享
发布于 2021-03-26 20:31
有没有大神给个第一题java的解法
点赞 回复 分享
发布于 2021-03-27 10:38
真尴尬,没做过牛客,这上来还要自定义输入输出的,整了半天,然后第一题,先用dp发现不对,再用dfs,结果dfs的中间结果没保存下来,一时半会没发现,这就快没时间了。 然后一想,没有这么复杂啊,直接双指针暴力算就是了,结果写了一版双指针滑动窗口,按0分割,保存分割出来的1的长度,然后两两比较取最大,写完了突然想起来0可能有连续出现的情景,就又修改了代码,然后调试好往回粘的时候时间到了,真是cao了。 说道理,还是自己太菜了,另外也没调研牛客写题目还要自定义输入输出的,我之前都是刷leetcode的。 最后贴一下第一题的代码,也没提交,也不知道对不对,就是感觉跟吃了屎一样难受!
点赞 回复 分享
发布于 2021-03-27 18:47
我第二题直接dfs构图的,然后再算每个酒店的最小,最不过时间来不及写完,有没有兄弟们和我方法一样写出来的,能过吗
点赞 回复 分享
发布于 2021-03-28 15:54

相关推荐

点赞 评论 收藏
分享
3 10 评论
分享
牛客网
牛客企业服务