1877 - K Max

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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)