This shows you the differences between two versions of the page.
|
programare:tema1_cbcd_2015_2016 [2015/10/26 00:25] cosmin.boaca |
programare:tema1_cbcd_2015_2016 [2015/10/26 17:50] (current) cosmin.boaca [Trimitere temă] |
||
|---|---|---|---|
| Line 32: | Line 32: | ||
| == Input == | == Input == | ||
| - | Pe prima linie a fișierului de intrare se va regăsi numărul K. | + | Pe prima linie se va regăsi numărul K. |
| K | K | ||
| Line 38: | Line 38: | ||
| == Output: == | == Output: == | ||
| - | Pe prima linie din fișierul de ieșire se va găsi **numărul N de perechi** de forma (a, b) care resepctă proprietatea descrisă mai sus | + | Pe prima linie se va găsi **numărul N de perechi** de forma (a, b) care resepctă proprietatea descrisă mai sus |
| Pe următoarele N linii se vor regăsi perechile **(ai, bi), ai < bi** sortate în ordinea crescătoare a numărului **ai**, iar în caz de egalitate în ordinea crescătoare a numărului **bi** | Pe următoarele N linii se vor regăsi perechile **(ai, bi), ai < bi** sortate în ordinea crescătoare a numărului **ai**, iar în caz de egalitate în ordinea crescătoare a numărului **bi** | ||
| Line 60: | Line 60: | ||
| == Input == | == Input == | ||
| - | Pe prima linie din fisierul de intrare se vor găsi numerele P, X. | + | Pe prima linie se vor găsi numerele P, X. |
| P X | P X | ||
| Line 74: | Line 74: | ||
| 0 < P < 4 | 0 < P < 4 | ||
| + | === Task3. 40p === | ||
| + | Cosmin si Florin au descoperit un nou joc. Ei au un teren de luptă de 8x8 codificat sub forma unui număr pe 64 de biți (unsigned long long). | ||
| + | Pe terenul de luptă se află soldați ** (codificați cu bit-ul 1) ** și celule libere ** (codificate cu bit-ul 0) **. | ||
| + | |||
| + | <note tip> | ||
| + | |||
| + | **7 = 0000000000000000000000000000000000000000000000000000000000000111** | ||
| + | |||
| + | Codifică harta următoare | ||
| + | |||
| + | ^ Hartă pentru valoarea 7^^^^^^^^ | ||
| + | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ||
| + | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ||
| + | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ||
| + | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ||
| + | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ||
| + | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ||
| + | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | | ||
| + | | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | | ||
| + | |||
| + | </note> | ||
| + | |||
| + | Cosmin și Florin mută alternativ câte un soldat dintr-o celulă a hărții intr-o altă celulă a hărții. | ||
| + | Dacă un soldat este mutat într-o celulă în care se află alt soldat se vor lupta intre ei, iar ambii vor dispărea de pe teren. Mutările făcute | ||
| + | sunt codificate sub forma unui număr întreg astfel: | ||
| + | - primii 6 biți reprezintă pozitia curentă a unui soldat pe hartă: (primii 3 biți reprezintă coloana, iar următorii 3 biți reprezintă linia). | ||
| + | - următorii 6 biti reprezintă pozitia în care soldatul se va teleporta pe harta: (primii 3 biți reprezintă coloana, iar următorii 3 biți reprezintă linia) | ||
| + | |||
| + | <note tip> | ||
| + | |||
| + | Numărul **2655 (baza 10) ** = ** 101001011111 (baza 2) ** reprezinta o codificarea a următoarei mutări pe hartă: | ||
| + | |||
| + | poziția curentă: ** (011, 111) ** -> ** (3, 7) ** | ||
| + | |||
| + | poziția în care soldatul va fi mutat ** (101, 001) ** -> ** (5, 1) ** | ||
| + | |||
| + | </note> | ||
| + | |||
| + | Fiind dată o hartă inițiala și o lista de mutări codificate ca în exemplul anterior Cosmin și Florin vă roagă să afișați configurația finală a hărții sub forma unui număr pe 64 de biți. Ei vă vor recompensa cu 40 de puncte dacă reușiți să afișați configurația finală corect. | ||
| + | |||
| + | == Input == | ||
| + | |||
| + | Pe prima linie se va găsi un număr pe 64 de biți reprezentând configurația inițială a hărții. | ||
| + | |||
| + | Pe următoarea linie se va afla un număr N, reprezentând numărul de mutări făcute de soldați. | ||
| + | |||
| + | Pe următoarele N linii se vor afla numere întregi reprezentând codificările mutărilor. | ||
| + | |||
| + | ConfigurațieHartă | ||
| + | N | ||
| + | mutare1 | ||
| + | mutare2 | ||
| + | . | ||
| + | . | ||
| + | . | ||
| + | mutareN | ||
| + | |||
| + | == Output == | ||
| + | |||
| + | Configurația finală a jocului după ce au fost aplicate cele N mutări. | ||
| + | |||
| + | ConfigurațieFinală | ||
| + | |||
| + | == Precizări == | ||
| + | <note warning> | ||
| + | |||
| + | - Dacă pe poziția curentă nu se află un soldat (bit-ul corespunzător este 0) mutarea nu se va aplica | ||
| + | - Dacă pe poziția unde va fi mutat un soldat există un alt soldat ambii vor dispărea de pe hartă | ||
| + | - Folosiți tipuri de date unsigned pentru variabilele pe care faceți operații pe biți ** in special pentru configurația hărții ** | ||
| + | - Numărul afisat în fișierul de ieșire **TREBUIE** să fie un număr positiv | ||
| + | |||
| + | </note> | ||
| + | |||
| + | == Exemplu == | ||
| + | |||
| + | ** Input: ** | ||
| + | 7 | ||
| + | 4 | ||
| + | 3647 (muta de la (7,7) la (7,0)) | ||
| + | 3710 (muta de la (7,6) la (7,1)) | ||
| + | 3641 (muta de la (7,1) la (7,0)) | ||
| + | 1133 (muta de la (5,5) la (2,1)) | ||
| + | |||
| + | ** Output: ** | ||
| + | 4 | ||
| + | |||
| + | ** Explicație ** | ||
| + | |||
| + | {{http://s4.postimg.org/41260rbbx/Explanation.png}} | ||
| + | |||
| + | ==== Trimitere temă ==== | ||
| + | |||
| + | Tema va fi trimisă folosind [[https://vmchecker.cs.pub.ro|vmchecker]] | ||
| + | |||
| + | După cum probabil ați observat task-urile au un total de 80p. Celelalte 20p se vor acorda pentru [[https://www.kernel.org/doc/Documentation/CodingStyle|coding style]]. | ||
| + | |||
| + | Formatul arhivei va fi următorul: | ||
| + | - 3 fișiere .c, câte unul pentru fiecare task | ||
| + | - Un fișier **Makefile / makefile** care să conțină următoarele reguli: | ||
| + | - build-tX: crează executabilul aferent task-ului X, X ia valori din {1, 2, 3} | ||
| + | - run-tX: rulează executabilul aferent task-ului X, X ia valori din {1, 2, 3} | ||
| + | - Un fișier README în care descrieți ideea voastră pentru fiecare dintre task-uri | ||
| + | |||
| + | <note warning> | ||
| + | |||
| + | Arhiva trebuie să fie de tipul zip. | ||
| + | |||
| + | **Lipsa** fișierului README se depunctează cu 10p. | ||
| + | |||
| + | Inputul pentru **TOATE** task-urile va fi citit de la **stdin (tastatura)** iar output-ul va fi afișat la **stdout (ecran)**. | ||
| + | |||
| + | Dacă nu rezolvați un anumit task regulile build-tX / run-tX corespunzătoare task-ului respectiv **trebuie** să apară in Makefile, chiar dacă ele nu vor face nimic. | ||
| + | |||
| + | </note> | ||