<?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=1499_-_Broscute</id>
	<title>1499 - Broscute - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1499_-_Broscute"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1499_-_Broscute&amp;action=history"/>
	<updated>2026-05-01T06:38:48Z</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=1499_-_Broscute&amp;diff=9989&amp;oldid=prev</id>
		<title>RebecaBud: Pagină nouă: == Enunt == Pe un lac cu apă termală se află n+1 frunze de nuferi. Pe n dintre ele stau la soare n broscuțe. Evident, o frunză este liberă și broscuţele au început să se joace. În fiecare moment o broscuță sare de pe frunza ei pe frunza liberă din acel moment. == Cerinţa == Numerotând frunzele de la 1 la n+1, broscuțele de la 1 la n, şi cunoscându-se ordinea inițială a broscuțelor pe cele n+1 frunze, să se determine numărul minim de sărituri ale brosc...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1499_-_Broscute&amp;diff=9989&amp;oldid=prev"/>
		<updated>2024-06-03T16:16:49Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Pe un lac cu apă termală se află n+1 frunze de nuferi. Pe n dintre ele stau la soare n broscuțe. Evident, o frunză este liberă și broscuţele au început să se joace. În fiecare moment o broscuță sare de pe frunza ei pe frunza liberă din acel moment. == Cerinţa == Numerotând frunzele de la 1 la n+1, broscuțele de la 1 la n, şi cunoscându-se ordinea inițială a broscuțelor pe cele n+1 frunze, să se determine numărul minim de sărituri ale brosc...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Pe un lac cu apă termală se află n+1 frunze de nuferi. Pe n dintre ele stau la soare n broscuțe. Evident, o frunză este liberă și broscuţele au început să se joace. În fiecare moment o broscuță sare de pe frunza ei pe frunza liberă din acel moment.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Numerotând frunzele de la 1 la n+1, broscuțele de la 1 la n, şi cunoscându-se ordinea inițială a broscuțelor pe cele n+1 frunze, să se determine numărul minim de sărituri ale broscuțelor de pe o frunză pe alta, astfel încât ele să se găsească într-o ordine finală, dată, precum şi săriturile realizate.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;broscute.in&amp;#039;&amp;#039;&amp;#039; conține pe prima linie un număr natural n reprezentând numărul de broscuțe separat printr-un spațiu de un număr natural t, care reprezintă cerința: 1, dacă se cere numărul de sărituri, respectiv 2 dacă se cere ordinea săriturilor. Linia a doua conține n+1 numere naturale reprezentând configurația inițială a broscuțelor pe cele n+1 frunze, iar linia a treia conține n+1 numere naturale reprezentând configurația finală a broscuțelor pe cele n+1 frunze.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;broscute.out&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie un număr natural k ce reprezintă numărul minim de sărituri, dacă cerința este 1. Dacă cerința este 2 fișierul de ieșire va conține mai multe linii, pe fiecare dintre ele existând 3 numere naturale b s d, separate prin câte un spațiu, care descriu săritura, reprezentând numărul broscuței b, frunza de pe care sare s și frunza pe care sare d. În cazul în care la cerința 2 broscuțele nu fac nici o săritură se va afișa pe prima linie mesajul &amp;#039;&amp;#039;&amp;#039;&amp;#039;broscutele nu se joaca&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2 ≤ n ≤ 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* În descrierea configurațiilor din fișierul de intrare frunza liberă este reprezentată prin valoarea 0&lt;br /&gt;
* Pentru cerința 1 se acordă 50% din punctaj, iar pentru cerința 2 tot 50% din punctaj.&lt;br /&gt;
* În cazul în care cerința este 2 și numărul de sărituri afișate nu este minim dar realizează ajungerea la configurația finală se acordă doar 30% din punctaj.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; broscute.in&lt;br /&gt;
&lt;br /&gt;
  4 2&lt;br /&gt;
  3 2 0 1 4&lt;br /&gt;
  1 2 3 4 0&lt;br /&gt;
; broscute.out&lt;br /&gt;
&lt;br /&gt;
  3 1 3&lt;br /&gt;
  1 4 1&lt;br /&gt;
  4 5 4&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt 4 broscuţe, deci 5 frunze de nufăr. Cerinţa este 2.&lt;br /&gt;
&lt;br /&gt;
* Broscuţele vor face 3 sărituri:&lt;br /&gt;
* broscuţa 3 sare de pe frunza 1 pe frunza 3&lt;br /&gt;
* broscuţa 1 sare de pe frunza 4 pe frunza 1&lt;br /&gt;
* broscuţa 4 sare de pe frunza 5 pe frunza 4&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; broscute.in&lt;br /&gt;
&lt;br /&gt;
  4 1&lt;br /&gt;
  3 2 0 1 4&lt;br /&gt;
  1 2 3 4 0&lt;br /&gt;
; broscute.out&lt;br /&gt;
&lt;br /&gt;
  3&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; broscute.in&lt;br /&gt;
&lt;br /&gt;
  4 2&lt;br /&gt;
  3 2 0 1 4&lt;br /&gt;
  3 2 0 1 4&lt;br /&gt;
; broscute.out&lt;br /&gt;
&lt;br /&gt;
  broscutele nu se joaca&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def min_jumps_or_order(n, initial_config, final_config, request):&lt;br /&gt;
    if request == 1:&lt;br /&gt;
        return min_jumps(n, initial_config, final_config)&lt;br /&gt;
    elif request == 2:&lt;br /&gt;
        return min_jumps_order(n, initial_config, final_config)&lt;br /&gt;
&lt;br /&gt;
def min_jumps(n, initial_config, final_config):&lt;br /&gt;
    jumps = 0&lt;br /&gt;
    for i in range(n+1):&lt;br /&gt;
        if initial_config[i] != final_config[i]:&lt;br /&gt;
            jumps += 1&lt;br /&gt;
    return jumps&lt;br /&gt;
&lt;br /&gt;
def min_jumps_order(n, initial_config, final_config):&lt;br /&gt;
    jumps = []&lt;br /&gt;
    for i in range(n+1):&lt;br /&gt;
        if initial_config[i] != final_config[i]:&lt;br /&gt;
            for j in range(i+1, n+1):&lt;br /&gt;
                if final_config[i] == initial_config[j]:&lt;br /&gt;
                    jumps.append((j, initial_config.index(final_config[i]), i))&lt;br /&gt;
                    initial_config[j], initial_config[i] = initial_config[i], initial_config[j]&lt;br /&gt;
                    break&lt;br /&gt;
    if not jumps:&lt;br /&gt;
        return &amp;quot;broscutele nu se joaca&amp;quot;&lt;br /&gt;
    return jumps&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;broscute.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        n, request = map(int, fin.readline().split())&lt;br /&gt;
        initial_config = list(map(int, fin.readline().split()))&lt;br /&gt;
        final_config = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = min_jumps_or_order(n, initial_config, final_config, request)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;broscute.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        if request == 1:&lt;br /&gt;
            fout.write(f&amp;quot;{result}\n&amp;quot;)&lt;br /&gt;
        elif request == 2:&lt;br /&gt;
            if isinstance(result, str):&lt;br /&gt;
                fout.write(result)&lt;br /&gt;
            else:&lt;br /&gt;
                fout.write(&amp;#039;\n&amp;#039;.join([&amp;#039; &amp;#039;.join(map(str, jump)) for jump in result]))&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>RebecaBud</name></author>
	</entry>
</feed>