python测试需解答,没有思路

问题遇到的现象和发生背景

测试共30步,每步有时间和内存限制
时间限制: 5 s
内存限制: 256 MB
彼佳来到异国他乡,决定买一件纪念品。在纪念品商店里,各种类型的小雕像排成一排,一个小雕像成本正好是它单位的当地货币。彼佳决定购买从1到X的各种小雕像。事实证明,如果彼佳购买的小雕像不在任意位置,而是在某个连续的部分(包括从 1 到 X的某个位置的所有小雕像),他将获得不错的折扣。彼佳立刻意识到他可能需要买几个相同类型的小雕像,他决定回家后多给朋友们赠送。例如,如果商店里的小雕像按照1 2 2 3 3 1的顺序展示,并且彼佳想购买 1到3 类型的小雕像,然后他可以购买第一个到第四个位置的小雕像(将购买两个2类型的小雕像)。如果小雕像 1 2 5 4 3 陈列在商店中,那么彼佳将购买所有 5 个小雕像。帮助彼佳确定商店中排列的小雕像的最低总成本,以便其中他们有从1到k的各种小雕像。保证所有测试数据都存在答案。输入第一行包含两个整数n和k(1<k<n<500,000。第二行包含n个整数(小雕像的类型i,1<a_i<n),纪念品商店小雕像的描述。小雕像从左到右列出。保证所有测试数据都存在答案。输出打印一个整数,即他可以购买小雕像的最小本地货币数量(不包括未来的折扣)。
标准输入
6 3(下一列有6个元素,他想用折扣价买123)
1 2 2 3 3 1(他最终买了1223,花费为和1223的和 8)
标准输出
8
标准输入
5 3
1 2 5 4 3 (他会全部都买)
标准输出
15
标准输入
6 3
1 2 6 3 3 1
标准输出
12
标准输入
6 1
6 2 3 1 2 3
标准输出
1
标准输入
7 7
1 2 3 4 6 5 7
标准输出
28
标准输入
10 2
1 9 2 4 3 1 8 2 10 9
标准输出
10(他会买2431)


class Queue:
    def __init__(self, size):
        self.front = 0
        self.tail = 0
        self.List = [None] * size
        self.size = size

    # 清空队列
    def clear(self):
        self.front = self.tail
        self.List = [None] * self.size

    # 将array入队
    def enqueue(self, array):
        for i in range(len(array)):
            if self.tail - self.front == self.size:
                raise Exception("队满")
            if array[i] == ' ':
                continue
            else:
                self.List[self.tail] = eval(array[i])
                self.tail += 1

    # 将数据依次出队并且匹配
    def dequeue_mate(self, mate):
        data_array = []
        for i in range(self.tail - self.front):
            data_array.append(self.List[i])
            self.front += 1
            if self.List[i] == eval(mate):
                data_array.append(self.List[i])
                self.front += 1
                break
        if data_array[-1] != eval(mate):
            return "没有匹配到!"
        return sum(data_array[:-1])


if __name__ == '__main__':
    a = input("请输入第一行的数(用空格隔开):")
    b = input("请输入第二行的数(用空格隔开):")
    # 类型为字符(队列类里面会转换)
    the_array = b.split(' ')
    maxSize = eval(a.split(' ')[0])
    the_mate = a.split(' ')[1]
    # 定义一个队列容器
    queue = Queue(size=maxSize)
    # 将数组the_array入队
    queue.enqueue(array=the_array)
    # 对列出队并且与the_mate匹配(返回输出的值)
    the_data = queue.dequeue_mate(mate=the_mate)
    print(the_data)

结果:

img

重新按照你的要求写了一遍,有用的话第一下采纳

说实话没看懂


class Queue:
    def __init__(self, size):
        self.front = 0
        self.tail = 0
        self.List = [None] * size
        self.size = size

    # 清空队列
    def clear(self):
        self.front = self.tail
        self.List = [None] * self.size

    # 将array入队
    def enqueue(self, array):
        for i in range(len(array)):
            if self.tail - self.front == self.size:
                raise Exception("队满")
            if array[i] == ' ':
                continue
            else:
                self.List[self.tail] = eval(array[i])
                self.tail += 1

    # 将数据依次出队并且匹配
    def dequeue_mate(self, mate):
        data_array = []
        for i in range(self.tail - self.front):
            data_array.append(self.List[i])
            self.front += 1
            if self.List[i] == eval(mate):
                break
        return sum(data_array)


if __name__ == '__main__':
    a = '6 3'
    b = '1 2 6 3 3 1'
    # 类型为字符(队列类里面会转换)
    the_array = b.split(' ')
    maxSize = eval(a.split(' ')[0])
    the_mate = a.split(' ')[1]
    # 定义一个队列容器
    queue = Queue(size=maxSize)
    # 将数组the_array入队
    queue.enqueue(array=the_array)
    # 对列出队并且与the_mate匹配(返回输出的值)
    the_data = queue.dequeue_mate(mate=the_mate)
    print(a)
    print(b)
    print(the_data)

img


这是队列的经典用法,我写的队列是顺序队列,你可以试一试链队列,我写的顺序队列里面很多方法都没有实现,因为是进行匹配,所以也没有判断队列是否出队完毕,你可以改进一下,有用的话点一下采纳