<?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=2934_-_Cmmp</id>
	<title>2934 - Cmmp - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2934_-_Cmmp"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2934_-_Cmmp&amp;action=history"/>
	<updated>2026-05-02T03:33:58Z</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=2934_-_Cmmp&amp;diff=9924&amp;oldid=prev</id>
		<title>Benzar Ioan: Pagină nouă: == Cerința == Pentru orice număr natural x definim operația cmmp prin care adăugăm cifre la stânga lui x, la dreapta lui x sau la ambele capete ale lui x, astfel încât numărul obținut să fie pătrat perfect și cât mai mic posibil.   Se dau N numere naturale s1,s2…sN .  Să se determine pentru fiecare număr s[k], 1 ≤ k ≤ N, cel mai mic pătrat perfect care se poate obține prin aplicarea operației cmmp. == Date de intrare == Fișierul de intrare cmmp.in...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2934_-_Cmmp&amp;diff=9924&amp;oldid=prev"/>
		<updated>2024-06-03T03:50:20Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerința == Pentru orice număr natural x definim operația cmmp prin care adăugăm cifre la stânga lui x, la dreapta lui x sau la ambele capete ale lui x, astfel încât numărul obținut să fie pătrat perfect și cât mai mic posibil.   Se dau N numere naturale s1,s2…sN .  Să se determine pentru fiecare număr s[k], 1 ≤ k ≤ N, cel mai mic pătrat perfect care se poate obține prin aplicarea operației cmmp. == Date de intrare == Fișierul de intrare cmmp.in...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerința ==&lt;br /&gt;
Pentru orice număr natural x definim operația cmmp prin care adăugăm cifre la stânga lui x, la dreapta lui x sau la ambele capete ale lui x, astfel încât numărul obținut să fie pătrat perfect și cât mai mic posibil.&lt;br /&gt;
 &lt;br /&gt;
Se dau N numere naturale s1,s2…sN&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Să se determine pentru fiecare număr s[k], 1 ≤ k ≤ N, cel mai mic pătrat perfect care se poate obține prin aplicarea operației cmmp.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare cmmp.in conține pe primul rând numărul N. Pe linia a doua sunt scrise N numere naturale separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul de ieșire cmmp.out vor fi scrise, în ordinea corespunzătoare citirii și separate prin câte un spațiu, cele N numere obținute din numerele date prin aplicarea operației cmmp.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N ≤ 100.000&lt;br /&gt;
*0 ≤ s[k] &amp;lt; 100.000&lt;br /&gt;
*Pentru 20% din teste 0 ≤ s[k] &amp;lt; 100&lt;br /&gt;
*Pentru 20% din teste 0 ≤ s[k] &amp;lt; 1000&lt;br /&gt;
*Dacă numărul dat este pătrat perfect, atunci operația cmmp îl lasă neschimbat.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4&amp;lt;br&amp;gt;&lt;br /&gt;
21 0 19 80&lt;br /&gt;
;Iesire&lt;br /&gt;
121 0 196 2809&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def is_perfect_square(x):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Verifică dacă un număr este pătrat perfect.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    s = int(math.isqrt(x))&lt;br /&gt;
    return s * s == x&lt;br /&gt;
&lt;br /&gt;
def cmmp_operation(x):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Aplică operația cmmp pentru a obține cel mai mic pătrat perfect.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if is_perfect_square(x):&lt;br /&gt;
        return x&lt;br /&gt;
    &lt;br /&gt;
    x_str = str(x)&lt;br /&gt;
    min_perfect_square = float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
    &lt;br /&gt;
    for i in range(10):&lt;br /&gt;
        for j in range(10):&lt;br /&gt;
            for k in range(10):&lt;br /&gt;
                possible_numbers = [&lt;br /&gt;
                    int(str(i) + x_str),&lt;br /&gt;
                    int(x_str + str(j)),&lt;br /&gt;
                    int(str(i) + x_str + str(j)),&lt;br /&gt;
                    int(str(k) + str(i) + x_str + str(j)),&lt;br /&gt;
                ]&lt;br /&gt;
                for num in possible_numbers:&lt;br /&gt;
                    if is_perfect_square(num):&lt;br /&gt;
                        min_perfect_square = min(min_perfect_square, num)&lt;br /&gt;
    &lt;br /&gt;
    return min_perfect_square if min_perfect_square != float(&amp;#039;inf&amp;#039;) else x&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;#039;cmmp.in&amp;#039;, &amp;#039;r&amp;#039;) as f:&lt;br /&gt;
        data = f.read().splitlines()&lt;br /&gt;
&lt;br /&gt;
    N = int(data[0].strip())&lt;br /&gt;
    numbers = list(map(int, data[1].strip().split()))&lt;br /&gt;
    &lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 100000, &amp;quot;N trebuie să fie între 1 și 100000&amp;quot;&lt;br /&gt;
    assert all(0 &amp;lt;= x &amp;lt;= 100000 for x in numbers), &amp;quot;Numerele trebuie să fie între 0 și 100000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    results = [cmmp_operation(num) for num in numbers]&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;#039;cmmp.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
        f.write(&amp;#039; &amp;#039;.join(map(str, results)) + &amp;#039;\n&amp;#039;)&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>Benzar Ioan</name></author>
	</entry>
</feed>