<?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=2150_-_Credite</id>
	<title>2150 - Credite - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2150_-_Credite"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2150_-_Credite&amp;action=history"/>
	<updated>2026-05-01T03:41: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=2150_-_Credite&amp;diff=9719&amp;oldid=prev</id>
		<title>Aurelia Raluca: Pagină nouă: == Enunț == Maria este studentă în anul I la facultatea de informatică și a primit o listă de &lt;code&gt;N&lt;/code&gt; probleme, numerotate de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;N&lt;/code&gt;, pe care trebuie să le rezolve la cursul de algoritmică, rezolvarea unei probleme durând exact o unitate de timp. Pentru că profesorul vrea să testeze capacitatea elevilor de a a face cele mai bune alegeri, pentru fiecare problemă acesta a stabilit numărul de credite (&lt;code&gt;Ci&lt;/code&gt;) pe care stud...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2150_-_Credite&amp;diff=9719&amp;oldid=prev"/>
		<updated>2024-03-23T00:30:27Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunț == Maria este studentă în anul I la facultatea de informatică și a primit o listă de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; probleme, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pe care trebuie să le rezolve la cursul de algoritmică, rezolvarea unei probleme durând exact o unitate de timp. Pentru că profesorul vrea să testeze capacitatea elevilor de a a face cele mai bune alegeri, pentru fiecare problemă acesta a stabilit numărul de credite (&amp;lt;code&amp;gt;Ci&amp;lt;/code&amp;gt;) pe care stud...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunț ==&lt;br /&gt;
Maria este studentă în anul I la facultatea de informatică și a primit o listă de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; probleme, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pe care trebuie să le rezolve la cursul de algoritmică, rezolvarea unei probleme durând exact o unitate de timp. Pentru că profesorul vrea să testeze capacitatea elevilor de a a face cele mai bune alegeri, pentru fiecare problemă acesta a stabilit numărul de credite (&amp;lt;code&amp;gt;Ci&amp;lt;/code&amp;gt;) pe care studentul le va primi dacă rezolvă problema &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, dar și un număr limită de unități de timp (&amp;lt;code&amp;gt;Ti&amp;lt;/code&amp;gt;) până la care problema poate fi rezolvată.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Cunoscând numărul de probleme, numărul de credite al fiecărei probleme precum și timpul limită de rezolvare al fiecărei probleme, scrieți un algoritm care determină &amp;lt;code&amp;gt;numărul maxim&amp;lt;/code&amp;gt; de credite pe care le poate obține Maria.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fișierului de intrare &amp;lt;code&amp;gt;crediteIN.txt&amp;lt;/code&amp;gt; se găsește un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul de probleme de pe listă.&lt;br /&gt;
&lt;br /&gt;
Pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii din fișierul de intrare vor fi datele despre fiecare problemă, pe linia &amp;lt;code&amp;gt;i+1&amp;lt;/code&amp;gt; găsindu-se &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;Ci&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;Ti&amp;lt;/code&amp;gt; care reprezintă numărul de credite, respectiv timpul limită pentru problema &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul &amp;lt;code&amp;gt;crediteOUT.txt&amp;lt;/code&amp;gt; se va afișa un singur număr natural, reprezentând numărul maxim de credite pe care Maria le poate obține.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 10000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ Ci ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ Ti ≤ 10000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;crediteIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
 10 3&lt;br /&gt;
 7 5&lt;br /&gt;
 8 1&lt;br /&gt;
 2 1&lt;br /&gt;
&amp;lt;code&amp;gt;crediteOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 25&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Maria alege să rezolve problema 3, renunțând la problema 4 pentru ca are mai puține credite și același timp limită ca problema 3. După aceea va rezolva problemele 1 și 2, adunând în total 25 de credite.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2: ==&lt;br /&gt;
&amp;lt;code&amp;gt;crediteIN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 10001&lt;br /&gt;
 10 3&lt;br /&gt;
 7 5&lt;br /&gt;
 8 1&lt;br /&gt;
 2 1&lt;br /&gt;
&amp;lt;code&amp;gt;crediteOUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Datele nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import heapq&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, v):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 10000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for nrC, timpul in v:&lt;br /&gt;
        if not (2 &amp;lt;= nrC &amp;lt;= 1000) or not (1 &amp;lt;= timpul &amp;lt;= 10000):&lt;br /&gt;
            return False&lt;br /&gt;
    &lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;crediteIN.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin, open(&amp;quot;crediteOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        ans = 0&lt;br /&gt;
        v = []&lt;br /&gt;
        timp = [False] * 10001&lt;br /&gt;
        tmax = 0&lt;br /&gt;
&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            line = fin.readline().strip()&lt;br /&gt;
            if not line:&lt;br /&gt;
                continue  # Ignoră liniile goale&lt;br /&gt;
&lt;br /&gt;
            vals = line.split()&lt;br /&gt;
            if len(vals) &amp;lt; 2:&lt;br /&gt;
                fout.write(&amp;quot;Datele din fisier nu sunt formatate corect&amp;quot;)&lt;br /&gt;
                return&lt;br /&gt;
            &lt;br /&gt;
            nrC, timpul = map(int, vals)&lt;br /&gt;
            v.append((nrC, timpul))&lt;br /&gt;
            if timpul &amp;gt; tmax:&lt;br /&gt;
                tmax = timpul&lt;br /&gt;
            timp[timpul] = True&lt;br /&gt;
&lt;br /&gt;
        if not verifica_restrictii(n, v):&lt;br /&gt;
            fout.write(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        q = []&lt;br /&gt;
&lt;br /&gt;
        for i in range(tmax, 0, -1):&lt;br /&gt;
            if timp[i]:&lt;br /&gt;
                for nrC, timpul in v:&lt;br /&gt;
                    if timpul == i:&lt;br /&gt;
                        heapq.heappush(q, (-nrC, timpul))&lt;br /&gt;
&lt;br /&gt;
            if q:&lt;br /&gt;
                nrC, timpul = heapq.heappop(q)&lt;br /&gt;
                ans += -nrC&lt;br /&gt;
    &lt;br /&gt;
        fout.write(str(ans))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aurelia Raluca</name></author>
	</entry>
</feed>