<?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=0722_-_Cifru</id>
	<title>0722 - Cifru - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0722_-_Cifru"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0722_-_Cifru&amp;action=history"/>
	<updated>2026-05-02T11:46:06Z</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=0722_-_Cifru&amp;diff=10104&amp;oldid=prev</id>
		<title>Danciu: Pagină nouă:  Alibaba trebuie să descopere cifrul care deschide cufărul cu comoara cea mare. Cifrul este foarte greu de găsit. El a descoperit mai multe pietre, fiecare piatră având o altă culoare, pe fiecare piatră fiind scris un număr natural cu cel mult &lt;code&gt;4&lt;/code&gt; cifre. Alibaba observă că numerele de pe fiecare piatră sunt distincte două câte două. Regula după care se formează cifrul este una foarte simplă, şi Alibaba a reuşit să o obţină destul de uşor: cif...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0722_-_Cifru&amp;diff=10104&amp;oldid=prev"/>
		<updated>2024-06-04T08:28:07Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă:  Alibaba trebuie să descopere cifrul care deschide cufărul cu comoara cea mare. Cifrul este foarte greu de găsit. El a descoperit mai multe pietre, fiecare piatră având o altă culoare, pe fiecare piatră fiind scris un număr natural cu cel mult &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre. Alibaba observă că numerele de pe fiecare piatră sunt distincte două câte două. Regula după care se formează cifrul este una foarte simplă, şi Alibaba a reuşit să o obţină destul de uşor: cif...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
Alibaba trebuie să descopere cifrul care deschide cufărul cu comoara cea mare. Cifrul este foarte greu de găsit. El a descoperit mai multe pietre, fiecare piatră având o altă culoare, pe fiecare piatră fiind scris un număr natural cu cel mult &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre. Alibaba observă că numerele de pe fiecare piatră sunt distincte două câte două. Regula după care se formează cifrul este una foarte simplă, şi Alibaba a reuşit să o obţină destul de uşor: cifrul este format din alăturarea într-o anumită ordine a tuturor pietrelor. Ceea ce Alibaba mai ştie este că pe poziţia &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; din cifru se găseşte cu siguranţă cifra &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care determină numărul de variante de cifruri pe care va trebui să le încerce Alibaba. Numărul fiind foarte mare se va calcula modulo &amp;lt;code&amp;gt;46337&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;cifru.out&amp;lt;/code&amp;gt; va conține pe prima linie trei numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; separate printr-un spaţiu, reprezentând numărul total de numere de pe pergament, poziţia &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; şi respectiv cifra &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; care se găseşte pe poziţia &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; în cifru. Pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii se găseşte câte unul din cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere de pe pergament.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Pe prima linie a fişierului de ieşire &amp;lt;code&amp;gt;cifru.out&amp;lt;/code&amp;gt; se va scrie un număr natural reprezentând numărul de variante modulo &amp;lt;code&amp;gt;46337&amp;lt;/code&amp;gt; de cifruri pe care va trebui să le încerce Alibaba.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; n &amp;lt; 25&amp;lt;/code&amp;gt;&lt;br /&gt;
* Numerele de pe fiecare piatră sunt strict pozitive mai mici decât &amp;lt;code&amp;gt;10000&amp;lt;/code&amp;gt; şi sunt distincte două câte două.&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ k ≤ 9&amp;lt;/code&amp;gt;&lt;br /&gt;
* Două cifruri diferă între ele prin ordinea de aşezare a pietrelor, chiar dacă numărul obţinut prin citirea numerelor de pe pietre este aceeaşi. De exemplu dacă există trei pietre având inscripţionate numerele &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi respectiv &amp;lt;code&amp;gt;123&amp;lt;/code&amp;gt;, ele se pot lipi astfel: &amp;lt;code&amp;gt;12-3-123&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;123-12-3&amp;lt;/code&amp;gt;, cele două cifruri considerându-se diferite, cifrele având culori diferite.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot;&amp;gt;&lt;br /&gt;
MOD = 46337  &lt;br /&gt;
&lt;br /&gt;
def count_cipher_variants(n, p, k, numbers):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Calculates the number of cipher variants modulo MOD.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
    total_variants = 1  # One variant with all numbers fixed except for the given one&lt;br /&gt;
    fixed_numbers = set([k])  # Set of fixed numbers (initially only k)&lt;br /&gt;
    remaining_numbers = set(numbers) - fixed_numbers  # Set of remaining numbers&lt;br /&gt;
&lt;br /&gt;
    for i in range(p - 1, -1, -1):&lt;br /&gt;
        choices_for_position_i = len(remaining_numbers)&lt;br /&gt;
        total_variants *= choices_for_position_i&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
        fixed_numbers.add(numbers.pop(i))  # Add the number to fixed numbers&lt;br /&gt;
        remaining_numbers.remove(numbers.pop(i))  # Remove it from remaining numbers&lt;br /&gt;
    return total_variants % MOD&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, p, k = map(int, input().split())&lt;br /&gt;
    numbers = [int(input()) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    cipher_variants = count_cipher_variants(n, p, k, numbers)&lt;br /&gt;
    print(cipher_variants)&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>Danciu</name></author>
	</entry>
</feed>