8.21 阿里笔试

第一题

  • 容易想到的过河方案就是最轻的人作为摆渡人,一趟一趟运
  • 还有一种是,最轻的人把第二轻的送到对岸,自己回来,再让最重的两个人过去,第二轻的再把船划回来
  • 一直比较这两种方案,直到人数小于3
  • AC
def first():
    t = int(input())
    for _ in range(t):
        n = int(input())
        weight = list(map(int, input().split(' ')))
        weight.sort()
        res = 0

        while n > 3:
            res += min(weight[1] * 2 + weight[0] + weight[-1], weight[0] * 2 + weight[-1] + weight[-2])
            weight.pop()
            weight.pop()
            n -= 2

        if n == 1 or n == 3:
            res += sum(weight)
        elif n == 2:
            res += max(weight)

        print(res)

第二题

  • 这个题我是自己枚举了3、4、5、6的情况,在草稿纸上发现的规律
  • 从特殊到一般,我就是猜测规律
  • 假设 A选点,B先走,A再走
  • 我估计是 B 必胜,每次A、B都会选权值最大的点,但我不会证明
  • 最后一分钟提交,本来想着能过多少算多少,居然AC了,其实是没想到的....

举个5个顶点的例子

  • B占据引导的地位,来左右A的路线

  • 开始A选权值最大的点
  • B走到权值第二大的点
  • A走到权值第三大的点
  • B回到权值最大的点
  • A走到权值第四大的点
  • B回到权值第二大的点
  • A走到权值第五大的点
  • B回到权值最大的点
  • A无路可走,B获胜

  • 计算权值和的时候就会发现代码里的规律了
def second():
    n = int(input())
    perfect = list(map(int, input().split(' ')))
    res = 0
    perfect.sort()
    for i in range(n - 1):
        res += perfect[-1] * perfect[i]
    for i in range(n - 2):
        res += perfect[-2] * perfect[i]
    print(res)


#笔试题目##阿里巴巴#
全部评论
这么简单?
1 回复 分享
发布于 2020-08-21 20:02
蹲一个思路...
1 回复 分享
发布于 2020-08-21 20:22
同蹲第二题思路
1 回复 分享
发布于 2020-08-21 20:23
第二题怎么做的。。
1 回复 分享
发布于 2020-08-21 20:29
//第二题 #include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int* record = new int[n + 1](); for (int i = 1; i < n + 1; ++i) cin>>record[i]; sort(record+1,record+n+1); int** res = new int* [n + 1]; for (int i = 0; i < n + 1; ++i) { res[i] = new int[n + 1](); if (i == 0) continue; for (int j = 1; j <= n; ++j) { if (i == j) continue; res[i][j] = 1; } } int sum = 0; int i = n; bool flag = true; while (flag) { int num = 0; for (int j = n; j >= 1; --j) { if (i == j) continue; if (res[i][j] == 1) { sum += record[i] * record[j]; //cout << "i:"<<i<<" j:"<<j<<" sum:"<<sum << endl; res[i][j] = 0; res[j][i] = 0; i = j; ++num; break; } } if (num == 0) flag = false; else flag = true; } cout << sum << endl; }
1 回复 分享
发布于 2020-08-21 20:32
楼主光辉下说一下第二题思路。 3个点,结果很明显。 4个点,从3个点最后状态开始,只能前往第4点,然后从第4点走回去。 5个点,从4个点最后状态开始,只能前往第5点,然后从第5点走回去。 ……
1 回复 分享
发布于 2020-08-21 20:34
第二题可以分享下思路吗大佬
点赞 回复 分享
发布于 2020-08-21 20:02
大佬牛逼,我就a了第一个,第二题没思路
点赞 回复 分享
发布于 2020-08-21 20:03
2 3 7 8求解释
点赞 回复 分享
发布于 2020-08-21 20:06
第二题这...
点赞 回复 分享
发布于 2020-08-21 20:07
第二题能a吗?
点赞 回复 分享
发布于 2020-08-21 20:12
太强了大佬,可以推荐下学习路径吗?鄙人刷完题做起笔试还是啥也不会。🤣
点赞 回复 分享
发布于 2020-08-21 20:12
tql 了,求思路
点赞 回复 分享
发布于 2020-08-21 20:36
没参加的人好奇问一下,第二题是什么题?
点赞 回复 分享
发布于 2020-08-21 20:49
谁发一下题啊,今晚去跑滴滴了
点赞 回复 分享
发布于 2020-08-21 21:13
可以说一下第二题的题目吗
点赞 回复 分享
发布于 2020-08-21 21:34
牛皮🐮
点赞 回复 分享
发布于 2020-08-21 22:28
大大太厉害了
点赞 回复 分享
发布于 2020-08-21 22:28
第二题思路牛逼,完全就是数学博弈,我也看了下
点赞 回复 分享
发布于 2020-08-21 22:58
tql
点赞 回复 分享
发布于 2020-08-21 23:46

相关推荐

01-23 14:54
同济大学 Java
热爱敲代码的程序媛:给你提几点【专业技能】这个模块里面可优化的地方:1.【具备JVM调优经验】可以去b站上搜一下JVM调优的视频,估计一两个小时凭你的学习能力就能掌握JVM调优的实践方面的技能。2.【MySql优化】MySql这一栏,你去b站或者找个博客看看MySql优化,学一下,如果你本身比较熟悉MySql语句的话,那基本半天时间凭你的学习能力MySql语句优化方面的技能你也能掌握个差不多。以上1,2两点主要是因为我看你专业技能大部分都说的是偏理论,没有写应用。再就是最后,你结合你的项目,想一想你的项目中哪些sql语句是可以用MySql优化的,到时候你面试的时候也好结合着说一下。
点赞 评论 收藏
分享
评论
18
42
分享

创作者周榜

更多
牛客网
牛客企业服务