<?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=2957_-_Nests</id>
	<title>2957 - Nests - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2957_-_Nests"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2957_-_Nests&amp;action=history"/>
	<updated>2026-05-01T04:39:52Z</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=2957_-_Nests&amp;diff=9747&amp;oldid=prev</id>
		<title>Cristina94: Pagină nouă: ==Enunţ== Pe vârfurile unui poligon regulat și-au făcut cuibul 𝑁 păsări. Cele 𝑁 vârfuri ale poligonului sunt numerotate cu numere de la 0 la 𝑁−1 în ordine sens trigonometric. Fiecare pasăre se găsește în câte un cuib. La un moment dat păsările își schimbe cuiburile. Se obține astfel o permutare (𝑐0 ,𝑐1 ,𝑐2 ,..., 𝑐𝑁−1) unde 𝑐𝑖 reprezintă cuibul în care s-a mutat pasărea care locuia inițial în cuibul 𝑖. Pentru ca toate...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2957_-_Nests&amp;diff=9747&amp;oldid=prev"/>
		<updated>2024-04-01T09:35:17Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ==Enunţ== Pe vârfurile unui poligon regulat și-au făcut cuibul 𝑁 păsări. Cele 𝑁 vârfuri ale poligonului sunt numerotate cu numere de la 0 la 𝑁−1 în ordine sens trigonometric. Fiecare pasăre se găsește în câte un cuib. La un moment dat păsările își schimbe cuiburile. Se obține astfel o permutare (𝑐0 ,𝑐1 ,𝑐2 ,..., 𝑐𝑁−1) unde 𝑐𝑖 reprezintă cuibul în care s-a mutat pasărea care locuia inițial în cuibul 𝑖. Pentru ca toate...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Enunţ==&lt;br /&gt;
Pe vârfurile unui poligon regulat și-au făcut cuibul 𝑁 păsări. Cele 𝑁 vârfuri ale poligonului sunt numerotate cu numere de la 0 la 𝑁−1 în ordine sens trigonometric. Fiecare pasăre se găsește în câte un cuib. La un moment dat păsările își schimbe cuiburile. Se obține astfel o permutare (𝑐0 ,𝑐1 ,𝑐2 ,..., 𝑐𝑁−1) unde 𝑐𝑖 reprezintă cuibul în care s-a mutat pasărea care locuia inițial în cuibul 𝑖. Pentru ca toate păsările sa depună același efort cuiburile vor fi alese astfel încât distanța între cuibul inițial 𝑖 și cel final 𝑐𝑖 să fie aceeași pentru toate cele 𝑁 păsări. Se consideră toate permutările (𝑐0 ,𝑐1 ,𝑐2 ,..., 𝑐𝑁−1) obținute după mutarea păsărilor și se ordonează lexicografic.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Scrieți un program citește două numere naturale 𝑁 și 𝐾 și care afișează permutarea situată pe poziția 𝐾 în ordine lexicografică după ordonarea permutărilor obținute prin mutarea păsărilor. ATENȚIE: numărul K va fi dat în baza 2.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
De la intrarea standard se va citi de pe prima linie numărul 𝑁 și de pe a doua linie un șir de valori 0 sau 1 neseparate prin spatii reprezentând cifrele numărului K scris în baza 2.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
La ieșirea standard vor fi afișate N numere întregi distincte, separate prin câte un spațiu, cu valori între 0 și 𝑁−1, reprezentând permutarea situată pe poziția 𝐾 în ordine lexicografică între toate permutările posibile obținute după mutarea păsărilor.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ N ≤ 1.000.000&lt;br /&gt;
*Se asigură că pentru N dat există cel puțin K posibilități pentru mutarea păsărilor.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:4&lt;br /&gt;
:101&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:0 3 2 1&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:101&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Date invalide: N trebuie să fie un număr natural între 1 și 1.000.000&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;
#2957 nests&lt;br /&gt;
def nth_lexicographic_permutation(N, K):&lt;br /&gt;
  # Convertim numărul K din baza 2 în baza 10&lt;br /&gt;
  K_base10 = int(K, 2)&lt;br /&gt;
  &lt;br /&gt;
  # Inițializăm permutarea cu cifrele de la 0 la N-1&lt;br /&gt;
  permutation = list(range(N))&lt;br /&gt;
  &lt;br /&gt;
  # Algoritmul lui Narayana pentru generarea permutărilor lexicografice&lt;br /&gt;
  for _ in range(K_base10):&lt;br /&gt;
    i = N - 2&lt;br /&gt;
    while i &amp;gt;= 0 and permutation[i] &amp;gt; permutation[i + 1]:&lt;br /&gt;
      i -= 1&lt;br /&gt;
    &lt;br /&gt;
    j = N - 1&lt;br /&gt;
    while permutation[j] &amp;lt; permutation[i]:&lt;br /&gt;
      j -= 1&lt;br /&gt;
    &lt;br /&gt;
    permutation[i], permutation[j] = permutation[j], permutation[i]&lt;br /&gt;
    permutation[i + 1:] = reversed(permutation[i + 1:])&lt;br /&gt;
&lt;br /&gt;
  return permutation&lt;br /&gt;
&lt;br /&gt;
def validate_input(N, K):&lt;br /&gt;
  try:&lt;br /&gt;
    N = int(N)&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 1000000:&lt;br /&gt;
      raise ValueError(&amp;quot;N trebuie să fie între 1 și 1.000.000&amp;quot;)&lt;br /&gt;
  except ValueError:&lt;br /&gt;
    return False, &amp;quot;N trebuie să fie un număr natural între 1 și 1.000.000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  if not K.isdigit() or set(K) - {&amp;#039;0&amp;#039;, &amp;#039;1&amp;#039;}:&lt;br /&gt;
    return False, &amp;quot;K trebuie să fie un număr în baza 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  return True, &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citirea datelor de intrare&lt;br /&gt;
  N = input(&amp;quot;Introduceți numărul N: &amp;quot;)&lt;br /&gt;
  K = input(&amp;quot;Introduceți numărul K în baza 2: &amp;quot;).strip()&lt;br /&gt;
&lt;br /&gt;
  # Validarea datelor de intrare&lt;br /&gt;
  is_valid, error_message = validate_input(N, K)&lt;br /&gt;
  if not is_valid:&lt;br /&gt;
    print(&amp;quot;Date invalide:&amp;quot;, error_message)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Generarea permutării și afișarea ei&lt;br /&gt;
  result = nth_lexicographic_permutation(int(N), K)&lt;br /&gt;
  print(&amp;quot;Permutarea lexicografică corespunzătoare poziției K:&amp;quot;, &amp;#039; &amp;#039;.join(map(str, result)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
</feed>