首页 > 京东数据分析笔试编程(原题复制)
头像
十四颗糖
编辑于 2020-04-18 21:40
+ 关注

京东数据分析笔试编程(原题复制)

第一题我就用贪心暴力做的,感觉挺菜的做法,最开始AC了27%,后来就多加了一个day_loss变量(原本每个循环都是sum_loss+=d*a[i]),先做加法再做乘法,突然全AC了。。🤣有一些改进吧,但是全AC不知道是我改进的原因还是赛码的原因。
第二题不会做😅,希望有大佬可以分享一下解题方法。

第一题

#最近经济不景气,小A准备将持仓的股票抛售一部分,他共持有n支股票,受交易平台的限制,他每天最多只能卖出m支股票,已知第i支股票每天会亏损a_i元,即如果第k天抛售这支股票,亏损的数额是k*a_i元。
#
#现在他还没有决定具体卖出多少支股票,所以他会给你若干个询问,即如果卖出q支股票,这q支股票最少的亏损数额是多少元。
#
#输入
#输入第一行包含两个正整数n和m,表示小A持仓的股票数量和每天最多能卖出的股票数量。(1<=n,m<=50000)
#输入第二行包含n个正整数,第i个数a_i表示第i支股票每天的亏损数额。(1<=a_i<=10000)
#接下来一行有一个正整数Q,表示询问的数量。(1<=Q<=50000)
#之后有Q行,每行有一个正整数q,表示假如要卖出q支股票,最少的亏损数额是多少元。(q<=n)

#样例输入
#5 2
#1 2 3 4 5
#2
#3
#5
#样例输出
#7
#22
#
#提示
#样例解释:
#一共有5支股票,每天最多可以抛售2支
#q为2,即有两个询问
#针对第一个询问3,需要抛售3支股票,当选择第1、2、3号股票时损失最小。其中第一天抛售2、3号股票,损失为5元;第二天抛售1号股票,损失为2*1=2元;最后合计损失为7元。
#针对第二个询问5,需要抛售第1、2、3、4、5号股票。其中第一天抛售4、5号股票,损失为9元;第二天抛售2、3号股票,损失为2*2+2*3=10;第三天抛售1号股票,损失为3*1=3元;最后合计损失22元。

import math

n, m = map(int, input().split())
a = list(map(int, input().split()))
a.sort(reverse=True)
p = int(input())
for pi in range(p):
    q = int(input())
    max_day = math.ceil(q/m)
    sum_loss = 0
    i = n - q
    for d in range(1, max_day):
        day_loss = 0
        for mi in range(m):
            day_loss += a[i]
            i += 1
        sum_loss += day_loss*d
    for mi in range(q - m*d):
        sum_loss += max_day * a[i]
    print(sum_loss)

第二题

#一共有n个格子从左到右排成了一行,从1~n编号。第 i 个格子上写着一个正整数a[i]。
#一开始你在1号格子,并且手里有一个数字h0。
#当你在第 i 号格子,手里有数字 h 的时候,你有两个选择:
#(1)跳到第i + h号格子,手中的数字依然是h;
#(2)跳到第i + a[i]号格子,手中的数字变成a[i];
#在跳跃的过程中是不允许超出n号格子的。
#你想知道一共有多少种不同的路径,可以从1号格子跳到n号格子,两条路径是不同的当且仅当它们经过的格子集合是不同的。输出不同路径的条数除以998244353的余数。
#输入
#第一行包含两个整数n和h0;
#第二行包含n个正整数a[i];
#2 <= n <= 1000, 1 <= a[i], h0 <= n - 1

#样例输入
#5 1
#2 3 2 4 3
#样例输出
#4
#
#
#提示
#输入样例2
#3 10
#10 10 10
#
#输出样例2
#0


全部评论

(7) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐