Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2021-03-13 10:11:00.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:logic3.in, logic3.outSursăOJSEPI 2021, clasa a 9-a
AutorAlin BurtaAdăugată deGabiTulbaGabi Tulba-Lecu GabiTulba
Timp execuţie pe test0.05 secLimită de memorie32768 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Logic3

Costel este pasionat de circuitele logice. El are la dispoziţie două tipuri de circuite logice simple: circuit ŞI, respectiv circuit SAU.
Circuitele logice simple au două intrări şi o ieşire.

Imaginile trebuie neaparat sa fie atasamente ale unei pagini.

La fiecare intrare în circuit se poate introduce un bit 0 sau un bit 1 , iar circuitul este capabil să calculeze operaţia logică respectivă (ŞI ori SAU) şi să trimită rezultatul obţinut la ieşire.
Costel a învăţat că poate combina mai multe circuite simple pentru a obţine circuite complexe astfel: leagă ieşirea unui circuit de orice tip la una din intrările altui circuit, deci rezultatul obţinut la ieşirea dintr-un circuit se transmite la intrarea celuilalt. In acest fel se pot construi circuite complexe, care au mai multe intrări şi o singură ieşire.

Ultima descoperire a lui Costel este circuitul logic piramidal (prescurtat CLP), care are structura următoare:

  • Circuitul cu un singur nivel este cel mai simplu tip de circuit şi este compus dintr-un circuit ŞI ori dintr-un circuit SAU;
  • Pentru un circuit cu mai multe nivele avem:
    • pe nivelul 1 se găseşte un singur circuit (ŞI ori SAU);
    • pe nivelul 2 se găsesc două circuite simple de oricare tip; ieşirea primului circuit este conectată la intrarea 1 a circuitului de pe nivelul 1, iar ieşirea celui de-al doilea circuit este conectată la intrarea 2 a circuitului de pe nivelul 1;
    • pe nivelul N sunt 2N-1 circuite simple; ieşirile primelor două circuite de pe linia N sunt conectate la intrările primului circuit de pe nivelul N-1, ieşirile următoarelor două sunt conectate la intrările celui de-al doilea circuit de pe linia N-1 etc;
Exemplu de CLP cu 2 nivele:
Imaginile trebuie neaparat sa fie atasamente ale unei pagini.

Intr-un CLP cu N nivele avem 2N intrări, corespunzătoare circuitelor de pe nivelul N. La fiecare intrare se poate introduce
un bit 0 sau un bit 1, deci un şir de 2N biţi.

Imaginile trebuie neaparat sa fie atasamente ale unei pagini.

Pentru circuitul din figura de mai sus presupunem că la cele patru intrări ale circuitelor de pe nivelul 2 avem, în ordine, biţii 0111 . La ieşirea din circuit (ieşirea circuitului simplu de pe primul nivel) se obţine valoarea 0, deoarece acest circuit este echivalent cu expresia logică ((0 şi 1) şi (1 sau 1)).

Cerinţa 1 (30 de puncte)

Pentru un CLP dat, cu N nivele şi pentru K şiruri de biţi date la intrarea circuitului, să se determine, pentru fiecare şir, valoarea calculată la ieşirea din circuit.

Cerinţa 2 (70 de puncte)

Pentru un CLP dat, cu N nivele şi cunoscând valoarea obţinută la ieşire ( 0 sau 1 ), să se determine numărul şirurilor de biţi distincte ce pot fi date la intrare pentru a se obţine valoarea specificată la ieşire. Rezultatul poate fi un număr foarte mare, de aceea el se va afişa modulo 666013.

Date de intrare

Pe prima linie a fişierului logic.in se găseşte un număr natural C ( C = 1 pentru cerinţa 1, respectiv C = 2 pentru cerinţa 2)

Pe a doua linie se găseşte numărul natural N, reprezentând numărul de nivele ale circuitului;

Pe următoarele N linii (linii de la 3 la N+2) se găseşte descrierea circuitului, fără spaţii între caractere, astfel:

  • pe linia 3 un caracter '&' sau '|', unde prin caracterul '&' se codifică un circuit ŞI, iar prin caracterul '|' se codifică un circuit SAU ;
  • pe linia 4 două caractere din mulţimea {'&', '|'};
  • pe linia 5 patru caractere din mulţimea {'&', '|'}
  • ...
  • pe linia N+2 avem 2N-1 caractere din mulţimea {'&','|'}

Pentru cerinţa 1:

Pe linia N + 3 avem un număr natural K, reprezentând numărul şirurilor de biţi date la intrarea în circuit;
Pe fiecare dintre următoarele K linii avem câte un şir compus din 2N biţi (caractere 0 sau 1 ), reprezentând şirul de biţi dat la intrare;

Pentru cerinţa 2:

Pe linia N + 3 avem un număr natural din mulţimea {0, 1}, reprezentând valoarea pe care circuitul trebuie să o scoată la ieşire.

Date de ieşire

Pentru cerinţa 1 se vor afişa, în fişierul logic.out, pe linii separate, K numere naturale din mulţimea {0, 1}, cu semnificaţia din enunţ;
Pentru cerinţa 2 se va afişa, în fişierul logic.out, un număr natural cu semnificaţia din enunţ.

Restricţii

  • 1 ≤ N ≤ 8
  • 1 ≤ K ≤ 10

Tabelele operaţiilor logice sunt:

xyx SAU yx ŞI y
0000
0110
1010
1111

Exemplu

logic3.inlogic3.out
1
2
&
&|
3
1101
0100
1000
1
0
0

Explicaţie

C=2 , deci rezovăm cerinţa 2.
Sunt 3 şiruri de 4 biţi pentru care se obţine valoarea 1 la ieşirea din circuit: 1101, 1110, 1111.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?