1239. 乘积最大

摘要
Title: 1239. 乘积最大
Tag: 贪心
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

1239. 乘积最大

  • 题意

    给定 N 个整数 A1,A2,…AN。
    请你从中选出 K 个数,使其乘积最大。
    请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以 1000000009 的余数。
    注意,如果 X<0, 我们定义 X 除以 1000000009 的余数是负(−X)除以 1000000009 的余数,即:0−((0−x)%1000000009)

  • 思路

    img
    在代码中实现时,就是如果kk为奇数,那么就先选最大的数,让kk变成偶数,如果最大的都是负数了,那么结果肯定是负数,也就是在以后比较时,得带着负号进行比较
    另外,负数和正数取时,都是成对取,哪个组合乘积大,选哪个

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    '''
    Author: NEFU AB-IN
    Date: 2022-03-30 20:16:21
    FilePath: \ACM\Acwing\1239.py
    LastEditTime: 2022-03-30 20:16:22
    '''
    MOD = int(1e9 + 9)
    n, k = map(int, input().split())
    a = []
    for i in range(n):
    a.append(int(input()))

    a.sort()
    l, r = 0, n - 1
    res = 1
    sign = 1 #符号,1代表正,-1代表负
    if k & 1:
    res = a[r]
    r -= 1
    k -= 1
    if res < 0:
    sign = -1

    while k:
    x = a[l] * a[l + 1]
    y = a[r] * a[r - 1]
    if x * sign > y * sign:
    res = abs(res) * abs(x) % MOD
    l += 2
    else:
    res = abs(res) * abs(y) % MOD
    r -= 2
    k -= 2
    print(res * sign)
使用搜索:谷歌必应百度