1877 - K Max

De la Universitas MediaWiki

Cerința

Se dă un șir cu n elemente, numere întregi, și un număr natural k ≤ n. Calculați cea mai mare sumă care poate fi obținută schimbând semnul a exact k elemente aflate pe poziții distincte din șirul dat.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului, apoi numărul k.

Date de iesire

Programul va afișa pe ecran numărul S, reprezentând suma maximă determinată.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • elementele șirului vor fi cuprinse între -1.000.000 și 1.000.000

Exemplu:

Intrare

5

5 -2 -3 4 1

1

Ieșire

11

Rezolvare

def calculeaza_max_sum(n, v, k):
    v.sort()

    for i in range(k):
        v[i] *= -1

    s = sum(v)
    return s

if __name__ == "__main__":
    while True:
        n = int(input("Introduceți valoarea lui n (1 ≤ n ≤ 1000): "))
        if 1 <= n <= 1000:
            break
        else:
            print("Intrare invalidă. Vă rugăm să introduceți o valoare în intervalul specificat.")

    while True:
        v = list(map(int, input("Introduceți elementele șirului separate prin spațiu: ").split()))
        elemente_valide = all(-1000000 <= elem <= 1000000 for elem in v)
        if elemente_valide:
            break
        else:
            print("Intrare invalidă. Asigurați-vă că toate elementele sunt în intervalul specificat.")

    while True:
        k = int(input("Introduceți valoarea lui k: "))
        if 1 <= k <= n:
            break
        else:
            print("Intrare invalidă. Vă rugăm să introduceți o valoare în intervalul specificat.")

    rezultat = calculeaza_max_sum(n, v, k)
    print(rezultat)