<?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=2977_-_Poarta_1</id>
	<title>2977 - Poarta 1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2977_-_Poarta_1"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2977_-_Poarta_1&amp;action=history"/>
	<updated>2026-05-01T06:38:47Z</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=2977_-_Poarta_1&amp;diff=9720&amp;oldid=prev</id>
		<title>Raul: Pagină nouă:  Sindbad a descoperit un recipient care conține o poțiune magică și o inscripție care descrie cum se poate deschide poarta unui templu. Urmând instrucțiunile din inscripție, Sindbad a ajuns la un tunel acoperit cu dale pătrate, aliniate astfel încât formează linii și coloane. Tunelul are mai multe linii, iar pe fiecare linie sunt câte &lt;code&gt;N&lt;/code&gt; dale. Dalele din tunel sunt numerotate începând cu &lt;code&gt;1&lt;/code&gt;, astfel încât, parcurgându-le linie cu lini...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2977_-_Poarta_1&amp;diff=9720&amp;oldid=prev"/>
		<updated>2024-03-26T16:19:34Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă:  Sindbad a descoperit un recipient care conține o poțiune magică și o inscripție care descrie cum se poate deschide poarta unui templu. Urmând instrucțiunile din inscripție, Sindbad a ajuns la un tunel acoperit cu dale pătrate, aliniate astfel încât formează linii și coloane. Tunelul are mai multe linii, iar pe fiecare linie sunt câte &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; dale. Dalele din tunel sunt numerotate începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, astfel încât, parcurgându-le linie cu lini...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
Sindbad a descoperit un recipient care conține o poțiune magică și o inscripție care descrie cum se poate deschide poarta unui templu. Urmând instrucțiunile din inscripție, Sindbad a ajuns la un tunel acoperit cu dale pătrate, aliniate astfel încât formează linii și coloane. Tunelul are mai multe linii, iar pe fiecare linie sunt câte &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; dale. Dalele din tunel sunt numerotate începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, astfel încât, parcurgându-le linie cu linie și fiecare linie de la stânga la dreapta, se obține un șir strict crescător de numere naturale consecutive. Sindbad se află la intrare, înaintea primei linii. Pentru a deschide poarta templului, el trebuie să ajungă pe dala numerotată cu &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;, călcând pe un număr minim de dale. Dacă există mai multe astfel de soluții, o va alege pe cea pentru care consumul total de picături de poțiune magică este minim. Pe parcursul deplasării el trebuie să respecte următoarele reguli:&lt;br /&gt;
&lt;br /&gt;
* de la intrare, poate sări pe orice dală aflată pe prima line, fără a consuma poțiune magică;&lt;br /&gt;
* de pe o dală numerotată cu &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, Sindbad poate sări fie pe dala numerotată cu &amp;lt;code&amp;gt;X + 1&amp;lt;/code&amp;gt;, consumând o picătură de poțiune magică, fie pe dala numerotată cu &amp;lt;code&amp;gt;2 * X&amp;lt;/code&amp;gt;, consumând două picături de poțiune magică.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieți un program care citește valorile &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; cu semnificația din enunț și rezolvă următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
1. afișează numărul minim de dale pe care trebuie să calce pentru a deschide poarta;&lt;br /&gt;
&lt;br /&gt;
2. afișează numărul natural &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, reprezentând numărul minim de picături de poțiune magică necesare pentru deschiderea porții.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;poarta.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; reprezentând cerința din problemă care trebuie rezolvată (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;). Pe a doua linie se află numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, iar pe a treia linie se află numărul natural &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;poarta.out&amp;lt;/code&amp;gt; va conține o singură linie pe care va fi scris un număr natural reprezentând răspunsul la cerința &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ N &amp;lt; 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este număr natural nenul cu cel mult &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt; de cifre; pentru o parte dintre teste, valorând în total 60 de puncte, &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;18&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
* Recipientul conține o cantitate suficientă de poțiune magică.&lt;br /&gt;
* Pentru rezolvarea &amp;#039;&amp;#039;&amp;#039;cerinței 1&amp;#039;&amp;#039;&amp;#039; se acordă maximum &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; de puncte, iar pentru rezolvarea &amp;#039;&amp;#039;&amp;#039;cerinței 2&amp;#039;&amp;#039;&amp;#039; se acordă maximum &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de puncte.&lt;br /&gt;
* În concurs s-au acordat &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; puncte din oficiu. Aici se acordă pentru exemplele din enunț.&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Tunelul are &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; dale pe fiecare linie. Sindbad trebuie să ajungă pe dala numerotată cu &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;. Numărul minim de dale pe care trebuie să calce pentru a ajunge pe dala &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; pentru a deschide poarta este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. De pe margine poate sări:&lt;br /&gt;
&lt;br /&gt;
– pe dala numerotată cu &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; (consumă &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; picături de poțiune magică);&lt;br /&gt;
&lt;br /&gt;
– de pe dala numerotată cu &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; pe cea numerotată cu &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; (consumă &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; picături de poțiune magică);&lt;br /&gt;
&lt;br /&gt;
– de pe dala numerotată cu &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; pe cea numerotată cu &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; (consumă &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; picătură de poțiune magică).&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    i = 0&lt;br /&gt;
    k = 1&lt;br /&gt;
    ck = 0&lt;br /&gt;
    nv = 0&lt;br /&gt;
    j = 0&lt;br /&gt;
    v = [0] * 1001&lt;br /&gt;
    nk = 0&lt;br /&gt;
    gata = False&lt;br /&gt;
    cer = 0&lt;br /&gt;
    pas = 0&lt;br /&gt;
    n = 0&lt;br /&gt;
    ok = 0&lt;br /&gt;
    T = 0&lt;br /&gt;
    c = &amp;#039;&amp;#039;&lt;br /&gt;
    f = open(&amp;quot;poarta.in&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    g = open(&amp;quot;poarta.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    cer, n = map(int, f.readline().split())&lt;br /&gt;
    nv = 0&lt;br /&gt;
    ok = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        c = f.read(1)&lt;br /&gt;
        if not c:&lt;br /&gt;
            break&lt;br /&gt;
        if c &amp;gt;= &amp;#039;0&amp;#039; and c &amp;lt;= &amp;#039;9&amp;#039;:&lt;br /&gt;
            nv += 1&lt;br /&gt;
            v[nv] = int(c)&lt;br /&gt;
    f.close()&lt;br /&gt;
    ck = n&lt;br /&gt;
    while ck:&lt;br /&gt;
        nk += 1&lt;br /&gt;
        ck = ck // 10&lt;br /&gt;
    while not gata:&lt;br /&gt;
        j = 0&lt;br /&gt;
        k += 1&lt;br /&gt;
        if v[nv] % 2 == 0:&lt;br /&gt;
            T += 2&lt;br /&gt;
            pas = 2&lt;br /&gt;
            for i in range(1, nv + 1):&lt;br /&gt;
                j = j * 10 + v[i]&lt;br /&gt;
                v[i] = j // 2&lt;br /&gt;
                j = j % 2&lt;br /&gt;
        else:&lt;br /&gt;
            T += 1&lt;br /&gt;
            pas = 1&lt;br /&gt;
            v[nv] -= 1&lt;br /&gt;
        if v[1] == 0:&lt;br /&gt;
            i = 1&lt;br /&gt;
            j = 1&lt;br /&gt;
            while v[i] == 0:&lt;br /&gt;
                i += 1&lt;br /&gt;
            nv = nv - i + 1&lt;br /&gt;
            while j &amp;lt;= nv:&lt;br /&gt;
                v[j] = v[i]&lt;br /&gt;
                j += 1&lt;br /&gt;
                i += 1&lt;br /&gt;
        if nv &amp;lt;= nk:&lt;br /&gt;
            ck = 0&lt;br /&gt;
            for i in range(1, nv + 1):&lt;br /&gt;
                ck = ck * 10 + v[i]&lt;br /&gt;
            if ck &amp;lt;= n:&lt;br /&gt;
                gata = True&lt;br /&gt;
    if pas == 2 and ck * 2 == n + 1:&lt;br /&gt;
        ck = n&lt;br /&gt;
        T = T - 1&lt;br /&gt;
    if cer == 1:&lt;br /&gt;
        g.write(str(k) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        g.write(str(T) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    g.close()&lt;br /&gt;
    return 0&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>Raul</name></author>
	</entry>
</feed>