<?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=3694_%E2%80%93_Tomi</id>
	<title>3694 – Tomi - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3694_%E2%80%93_Tomi"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3694_%E2%80%93_Tomi&amp;action=history"/>
	<updated>2026-05-01T05:48:42Z</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=3694_%E2%80%93_Tomi&amp;diff=6664&amp;oldid=prev</id>
		<title>Petras.du.ioana: Am creat de la zero.</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3694_%E2%80%93_Tomi&amp;diff=6664&amp;oldid=prev"/>
		<updated>2023-05-17T21:33:05Z</updated>

		<summary type="html">&lt;p&gt;Am creat de la zero.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3694/tomi]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Tomi este primarul ales în orașul Bittown. În oras sunt N locuitori și fiecare are un gard format din exact 60 de scânduri, fiecare dintre ele fiind vopsită în alb sau negru. Fiecare gard este codificat de Tomi printr-un număr natural a cărui reprezentare binară reproduce configurația gardului, de la stânga spre dreapta, scândurile negre fiind asimilate cu bitul 1 iar cele albe cu bitul 0. Astfel, ca exemplu, gardul care are doar ultimele două scânduri vopsite în negru va fi codificat de Tomi cu numărul 3. Tomi decide să-și construiască un gard care să fie reprezentativ pentru Bittown, adică să respecte toate regulile următoare:&lt;br /&gt;
1. Gardul primarului Tomi trebuie să aibă exact 60 de scânduri;&lt;br /&gt;
2. Trebuie să existe cel puțin K locuitori în Bittown care constată că pentru toate scândurile negre din gardul propriu, scândurile situate pe aceeași poziție în gardul primarului Tomi sunt vopsite tot în negru;&lt;br /&gt;
3. Numărul reprezentând codul gardului primarului Tomi trebuie să fie minim posibil.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare tomi.in conține pe prima linie doua numere naturale N și K. Pe cea de-a doua linie se află N numere, reprezentând codurile gardurilor locuitorilor din Bittown.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire tomi.out va conține un singur număr reprezentand codul gardului construit de primarul Tomi.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ N ≤ 100.000&lt;br /&gt;
* Fiecare cod este strict mai mic decât 260.&lt;br /&gt;
* Pentru 19 puncte, toți copiii vor avea doar codurile 1, 2 sau 3.&lt;br /&gt;
* Pentru alte 38 puncte, codurile copiilor vor mai mici decât 60.&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; tomi.in&lt;br /&gt;
: 6 3&lt;br /&gt;
: 1 1 5 8 10 8&lt;br /&gt;
; tomi.out&lt;br /&gt;
: 5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Răspunsul este 5 care are configurația în binar 101. Acesta este reprezentativ pentru codurile primelor trei garduri (1 1 5), pentru că le include configurațiile binare, respectând astfel regula 2.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def verificare_reguli(cod_primar, coduri_locuitori, K):&lt;br /&gt;
    count = 0&lt;br /&gt;
    for cod_locuitor in coduri_locuitori:&lt;br /&gt;
        if cod_locuitor &amp;amp; cod_primar == cod_locuitor:&lt;br /&gt;
            count += 1&lt;br /&gt;
    return count &amp;gt;= K&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;tomi.in&amp;quot;, &amp;quot;r&amp;quot;) as fisier_intrare:&lt;br /&gt;
        N, K = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        coduri_locuitori = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificarea datelor de intrare&lt;br /&gt;
    if N &amp;lt; 1 or N &amp;gt; 100000:&lt;br /&gt;
        print(&amp;quot;Eroare: N trebuie să fie între 1 și 100000.&amp;quot;)&lt;br /&gt;
        exit(1)&lt;br /&gt;
    if K &amp;lt; 1 or K &amp;gt; N:&lt;br /&gt;
        print(&amp;quot;Eroare: K trebuie să fie între 1 și N.&amp;quot;)&lt;br /&gt;
        exit(1)&lt;br /&gt;
    if len(coduri_locuitori) != N:&lt;br /&gt;
        print(&amp;quot;Eroare: Numărul de coduri de locuitori nu corespunde valorii N.&amp;quot;)&lt;br /&gt;
        exit(1)&lt;br /&gt;
    for cod_locuitor in coduri_locuitori:&lt;br /&gt;
        if cod_locuitor &amp;lt; 0 or cod_locuitor &amp;gt;= 2**60:&lt;br /&gt;
            print(&amp;quot;Eroare: Codul de gard al unui locuitor este invalid.&amp;quot;)&lt;br /&gt;
            exit(1)&lt;br /&gt;
&lt;br /&gt;
    cod_minim = float(&amp;quot;inf&amp;quot;)&lt;br /&gt;
    for i in range(1, 2**60):&lt;br /&gt;
        if verificare_reguli(i, coduri_locuitori, K):&lt;br /&gt;
            cod_minim = i&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;tomi.out&amp;quot;, &amp;quot;w&amp;quot;) as fisier_iesire:&lt;br /&gt;
        fisier_iesire.write(str(cod_minim))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Petras.du.ioana</name></author>
	</entry>
</feed>