Llittlefu level
获赞
10
粉丝
3
关注
0
看过 TA
2
上海交通大学
2021
C++
IP属地:未知
暂未填写个人简介
私信
关注
2020-04-15 19:23
已编辑
上海交通大学 C++
第一题n个人,每个人有一个特征值a,给n个人安排座位,最大化邻座两个人之间的特征值差异程度之和。输入:第一行一个正整数n,带表总人数第二行包含n个正整数,第i个正整数ai表示第i个人的特征值注意:邻座的定义是第i人(1<i<n)的邻座是i-1,i+1; 第1人的邻座是2,n; 第n人的邻座是1,n-1。邻座i,j差异值是|ai-aj|,取绝对值。每对邻座差异值只算一次。输出第一行:最大差异值第二行:输出用空格隔开的n个数,满足差异值最大化,重新排列过的特征值。(如果有多组,输出一组即可)题解:使用了交叉排序的思想,比如对于 3,6,2,9。第一步:排序,2,3,6,9, 时间复杂度...
郭子路:第二题100%,分别a, b排序,双指针 import sys n = int(sys.stdin.readline().strip()) nums = list() for i in range(n): a, b = map(int, sys.stdin.readline().strip().split()) nums.append([a, b, i]) nums_a = sorted(nums, key=lambda x:x[0], reverse=True) nums_b = sorted(nums, key=lambda x:x[1], reverse=True) posa = 0 posb = 0 res = 0 while(posa < n and posb < n): pre_a = nums_a[posa] pre_b = nums_b[posb] if pre_a[2] == pre_b[2]: posa += 1 continue val_a = pre_a[0]+pre_b[0] val_b = pre_a[1]+pre_b[1] val = min(val_a, val_b) res = max(res, val) if (val_a > val_b): posa += 1 else: posb += 1 print (res/2)
投递阿里巴巴集团等公司10个岗位 >
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务