欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2019应届毕业生,网易算法工程师笔试题第一题

程序员文章站 2024-02-26 23:19:58
...

第二题

2019应届毕业生,网易算法工程师笔试题第二题

题目描述

小易觉得高数课太无聊了,决定睡觉,不过他对课上的一些内容挺感兴趣的,所以希望你在老师讲到有趣的部分的时候叫醒他一下。 你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使他在接下来的k分钟内保持清醒。 你需要选择一种方案最大化小易这堂课听的知识点分值。

输入描述:

第一行n,k(1<=n,k<=10^5),表示这堂课持续多少分钟,以及叫醒小易一次使他能够保持清醒的时间。 第二行n个数,a1,a2,...,an(1<=ai<=10^4)表示小易对每分钟知识点的感兴趣评分。 第三行n个数,t1,t2,...,tn表示每分钟小易是否清醒,1表示清醒。

输出描述:

小易这堂课听到的知识点的最大兴趣值。

输入例子1:

6 3
1 3 5 2 5 4
1 1 0 1 0 0

输出例子1:

16

参考代码:

import sys
if __name__ == "__main__":
    while True:
        line1 = sys.stdin.readline().strip()
        if line1 == '':
            break
        line2 = sys.stdin.readline().strip()
        if line2 == '':
            break
        line3 = sys.stdin.readline().strip()
        if line3 == '':
            break
        line1 = [int(i) for i in line1.split()]
        line2 = [int(i) for i in line2.split()]
        line3 = [int(i) for i in line3.split()]
        k = line3
        total = []
        for i in range(line1[0]):
            sum = 0
            line3 = [_ for _ in k]
            if i + line1[1] <= line1[0]:
                line3[i:i+line1[1]] = [1] * line1[1]
            else:
                line3[i:] = [1] * (line1[0] - i)
            for j in range(line1[0]):
                sum += (line2[j] * line3[j])
            total.append(sum)
        print(max(total))