<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1760_-_Optim</id>
	<title>1760 - Optim - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1760_-_Optim"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1760_-_Optim&amp;action=history"/>
	<updated>2026-05-01T07:26:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1760_-_Optim&amp;diff=9787&amp;oldid=prev</id>
		<title>Oros Ioana Diana at 12:31, 18 May 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1760_-_Optim&amp;diff=9787&amp;oldid=prev"/>
		<updated>2024-05-18T12:31:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//wiki.universitas.ro/index.php?title=1760_-_Optim&amp;amp;diff=9787&amp;amp;oldid=9279&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1760_-_Optim&amp;diff=9279&amp;oldid=prev</id>
		<title>Oros Ioana Diana: Pagină nouă: Gigel primea de la mama lui, ca temă, o foaie pe care era scris un şir de N numere întregi. Singurul calcul pe care ştia să îl facă până acum era suma tuturor numerelor. Pentru aceasta el plasa N-1 semne de adunare, +, între numerele aflate pe poziţii consecutive în şir şi calcula astfel suma acestor numere. Între timp a crescut şi a învăţat şi operaţia de înmulţire pentru care foloseşte semnul *. Din şirul celor N-1 semne de adunare, îi trece prin m...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1760_-_Optim&amp;diff=9279&amp;oldid=prev"/>
		<updated>2024-01-08T22:29:19Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Gigel primea de la mama lui, ca temă, o foaie pe care era scris un şir de N numere întregi. Singurul calcul pe care ştia să îl facă până acum era suma tuturor numerelor. Pentru aceasta el plasa N-1 semne de adunare, +, între numerele aflate pe poziţii consecutive în şir şi calcula astfel suma acestor numere. Între timp a crescut şi a învăţat şi operaţia de înmulţire pentru care foloseşte semnul *. Din şirul celor N-1 semne de adunare, îi trece prin m...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Gigel primea de la mama lui, ca temă, o foaie pe care era scris un şir de N numere întregi. Singurul calcul pe care ştia să îl facă până acum era suma tuturor numerelor. Pentru aceasta el plasa N-1 semne de adunare, +, între numerele aflate pe poziţii consecutive în şir şi calcula astfel suma acestor numere. Între timp a crescut şi a învăţat şi operaţia de înmulţire pentru care foloseşte semnul *. Din şirul celor N-1 semne de adunare, îi trece prin minte să înlocuiască K semne + cu K semne *.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Îşi dă seama că tema se complică, deoarece înmulţirile trebuie efectuate înaintea adunărilor, dar nu se dă bătut şi duce calculul până la capăt.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care să determine valoarea minimă pe care o poate obţine şi valoarea maximă pe care o poate obţine după înlocuirea menţionată.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare optimin.txt conţine pe prima linie numerele naturale N şi K, separate printr-un spaţiu, reprezentând numărul de numere întregi din şir, respectiv numărul de operaţii de înmulţire ce vor fi efectuate. Pe cea de a doua linie se află N numere întregi separate prin câte un spaţiu, x1,x2,…xN&lt;br /&gt;
, reprezentând numerele din şir.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fişierul de ieşire optimout.txt va conţine pe o singură linie, separate printr-un spaţiu, în ordine crescătoare, cele două valori cerute.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;2 ≤ N ≤ 30&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;0 ≤ K ≤ 9; K &amp;lt; N&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;-8 ≤ xi ≤ 8,  1 ≤ i ≤ N&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; optimin.txt&lt;br /&gt;
: 6 3&lt;br /&gt;
: 2&lt;br /&gt;
: 0&lt;br /&gt;
: 3&lt;br /&gt;
: -1&lt;br /&gt;
: 7&lt;br /&gt;
: -4&lt;br /&gt;
; optimout.txt&lt;br /&gt;
: -31 86&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; optimin.txt&lt;br /&gt;
: 8 2&lt;br /&gt;
: -3&lt;br /&gt;
: 5&lt;br /&gt;
: 2&lt;br /&gt;
: 4&lt;br /&gt;
: -1&lt;br /&gt;
: 0&lt;br /&gt;
: -2&lt;br /&gt;
: 7&lt;br /&gt;
; optimout.txt&lt;br /&gt;
: -54 840&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1760 - Optim&lt;br /&gt;
def calc_min_max_values(N, K, numbers):&lt;br /&gt;
    # Verificăm restricțiile&lt;br /&gt;
    if not (2 &amp;lt;= N &amp;lt;= 30) or not (0 &amp;lt;= K &amp;lt; N):&lt;br /&gt;
        return &amp;quot;Fals&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm valorile minime și maxime cu suma inițială&lt;br /&gt;
    min_value = sum(numbers)&lt;br /&gt;
    max_value = sum(numbers)&lt;br /&gt;
&lt;br /&gt;
    # Generăm toate combinațiile de poziții pentru înmulțire&lt;br /&gt;
    for i in range(1 &amp;lt;&amp;lt; (N - 1)):&lt;br /&gt;
        # Convertim i la binar și adăugăm zerouri la început pentru a obține o reprezentare cu N-1 cifre binare&lt;br /&gt;
        binary_repr = bin(i)[2:].zfill(N - 1)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm suma pentru configurația curentă&lt;br /&gt;
        current_sum = numbers[0]&lt;br /&gt;
        current_multiply_count = 0&lt;br /&gt;
&lt;br /&gt;
        for j in range(N - 1):&lt;br /&gt;
            if binary_repr[j] == &amp;#039;0&amp;#039;:&lt;br /&gt;
                current_sum += numbers[j + 1]&lt;br /&gt;
            else:&lt;br /&gt;
                current_sum *= numbers[j + 1]&lt;br /&gt;
                current_multiply_count += 1&lt;br /&gt;
&lt;br /&gt;
        # Actualizăm valorile minime și maxime&lt;br /&gt;
        min_value = min(min_value, current_sum)&lt;br /&gt;
        max_value = max(max_value, current_sum)&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă numărul de înmulțiri este cel dorit (K)&lt;br /&gt;
        if current_multiply_count == K:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    return min_value, max_value&lt;br /&gt;
&lt;br /&gt;
# Citim datele de intrare din fișierul &amp;quot;optimin.txt&amp;quot;&lt;br /&gt;
with open(&amp;quot;optimin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    N, K = map(int, file.readline().split())&lt;br /&gt;
    numbers = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Calculăm valorile minime și maxime&lt;br /&gt;
result = calc_min_max_values(N, K, numbers)&lt;br /&gt;
&lt;br /&gt;
# Scriem rezultatele în fișierul &amp;quot;optimout.txt&amp;quot; sau afișăm &amp;quot;Fals&amp;quot; în cazul în care restricțiile nu sunt respectate&lt;br /&gt;
with open(&amp;quot;optimout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    if isinstance(result, tuple):&lt;br /&gt;
        file.write(f&amp;quot;{result[0]} {result[1]}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        file.write(result)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
2 * 0 + 3 * (-1)  + 7 * (-4)  = -31&lt;br /&gt;
&lt;br /&gt;
2 + 0 + 3 * (-1)  * 7 * (-4)  = 86.&lt;/div&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
</feed>