.campion
conectare | înregistrare | căutare
Pagina principală » Probleme » roboti

ultima problemă
grupă: mică
sursă: OMI 2016
ultimul articol
autor: Prof. Radu Vişinescu
ultimul software
autor: Prof. Emanuela Cerchez
roboti


Timp maxim de execuţie / test:
0.1s
Memorie totala disponibilă / stivă:
2MB / 1MB

Se consideră un caroiaj de forma unui pătrat cu n x n celule. Avem la dispoziţie cel mult n x n roboţei ce pot fi plasaţi în oricare din celulele caroiajului, cel mult un roboţel în fiecare celulă. Vom identifica roboţeii plasaţi în caroiaj prin litere mari care să indice în clar sensurile iniţiale de deplasare, după cum urmează: un roboţel de tipul ′U′ (up) se va deplasa de jos în sus (din celula în care se află, în celula situată pe linia de deasupra şi aceeaşi coloană) , un roboţel de tipul ′D′ (down) se va deplasa de sus în jos (din celula în care se află, în celula situată pe linia următoare şi aceeaşi coloană), un roboţel de tipul ′L′ (left) se va deplasa de la dreapta la stânga (din celula în care se află, în celula situată pe aceeaşi linie şi coloana din stânga), iar un roboţel de tipul ′R′ (right) se va deplasa de la stânga la dreapta (din celula în care se află, în celula situată pe aceeaşi linie şi coloana din dreapta).
Deplasarea are loc pentru un număr cunoscut de paşi k. Configuraţia iniţială se consideră pasul 0. La fiecare pas i, fiecare robot se va deplasa într-o celulă vecină celei ocupate la pasul anterior i-1, în conformitate cu sensul lui de deplasare. De exemplu, un roboţel de tip U va avansa în celula plasată deasupra lui, aşa cum un roboţel de tip L va avansa în celula plasată imediat în stânga celei curente. Este posibil ca traseele roboţeilor să se intersecteze sau să se suprapună. Dacă la un anumit pas, doi sau mai mulţi roboţei avansează în aceeaşi celulă, atunci are loc o mică implozie şi, practic, aceşti roboţei se dezintegrează şi dispar de pe caroiaj.



În figura 1 este exemplificată o astfel de situaţie: roboţeii de tip D şi R, prezenţi în caroiaj la pasul i-1, dispar la pasul următor i, pentru că avansează amândoi în celula din mijlocul caroiajului, în timp ce roboţelul de tip U nu are astfel de probleme şi îşi continuă deplasarea.



Să comentăm acum figura 2. Situaţia roboţeilor de tip D şi U de la pasul i-1 poate părea conflictuală, însă ei urmează să avanseze în celule diferite la pasul următor i, motiv pentru care nu are loc dezintegrarea lor; practic fac schimb de locuri şi îşi continuă deplasările.
În cadrul aceleiaşi figuri 2, paşii i şi i+1 implică o analiză specială care impune noi reguli privind deplasarea roboţeilor. Este vorba de roboţeii de tip L şi D care au atins marginile caroiajului şi nu mai pot executa deplasări la stânga, respectiv în jos, conform tipurilor lor. În astfel de cazuri, sensurile de deplasare pur şi simplu se inversează şi odată cu asta se schimbă şi tipurile roboţeilor. Aşa cum se observă şi în figură, roboţelul de tip L, la pasul i nu mai poate efectua deplasări la stânga, motiv pentru care se transformă în roboţel de tip R şi se deplasează cu o celulă mai la dreapta la pasul i+1, conform regulilor de deplasare corespunzătoare noului său tip. La fel se petrec lucrurile şi cu roboţelul de tip D de la pasul i care se transformă în roboţel de tip U la pasul i+1 şi urcă o poziţie în caroiaj. Evident că această regulă se aplică şi roboţeilor de celelalte două tipuri R şi U care, în situaţia în care ating marginile caroiajului, devin roboţi de tip L şi respectiv D, inversându-şi practic sensurile de deplasare. Aşa ar trebui să se întâmple lucrurile şi în cazul roboţelului de tip U situat în colţul din dreapta sus al caroiajului la pasul i+1. El ar trebui să se transforme în roboţel de tip D şi să ocupe o poziţie mai jos în caroiaj la pasul i+2. Numai că această poziţie este “revendicată” şi de roboţelul de tip R. Conform celor discutate anterior, dacă doi sau mai mulţi roboţei avansează în aceeaşi celulă, ei se dezintegrează şi dispar din caroiaj, aşa cum este ilustrat şi în figură. Roboţelul de tip D de la pasul i-1 este singurul care “a supravieţuit” până la pasul i+2, chiar dacă s-a transformat pe parcurs într-unul de tip U; rămânând singur în caroiaj, mişcarea sa continuă la nesfârşit, având în vedere schimbările corespunzătoare de sens şi de tip, ori de câte ori este cazul.

Cerinţă

Dându-se configuraţia inţială a caroiajului şi un număr specificat de paşi k, afişaţi numărul de roboţi care vor mai rămâne în caroiaj şi configuraţia obţinută după k paşi.

Date de intrare

Fisierul de intrare roboti.in contine pe prima linie numărul natural n (dimensiunea caroiajului). Pe cea de a doua linie se află numărul natural k (numărul de paşi). Pe următoarele n linii se află câte n caractere din mulţimnea {′U′, ′D′, ′L′, ′R′,′.′} (obligatoriu litere mari). Dacă celula nu conţine nici un roboţel, atunci i se asociază caracterul ′.′ (caracterul punct), în caz contrar, celula conţine un roboţel şi atunci i se asociază unul din caracterele ′U′, ′D′, ′L′ sau ′R′, în conformitate cu tipul iniţial al roboţelului plasat în celulă.

Date de ieşire

Fişierul de ieşire roboti.out va conţine pe prima linie numărul de roboţei care au rămas în caroiaj după k paşi. Pe următoarele n linii se vor afişa cele n x n valori care reprezintă configuraţia caroiajului după k paşi, sub forma a n linii, fiecare linie conţinând n caractere care pot fi: U, D, L, R sau . (caracterul punct).

Restricţii

1 ≤ n ≤ 20
1 ≤ k ≤ 100

Fişierele de intrare/ieşire nu conţin spaţii.

Exemple

roboti.inroboti.out
3 4 ... .RD ..U 1 ... ..D ...

autor: Prof. Roxana Timplaru
propunător: Prof. Emanuela Cerchez
Liceul de Informatica ″Grigore Moisil″
emanuela.cerchez@gmail.com
Probleme recomandate
De la ONI 2006: borg, diamant, matrice1, petrom, ratina, vitale, acolor, cifru1, evo, part, trasee, bombo, cub2, prieteni2, sg1, fact, limbaj, panouri, pereti, sant1, zumzi, adun, sport1, baschet1, mere3, tzigla, morse, powerpuff
De acelaşi autor: numere4, tablou, numar1, prieteni2, numere6, cartonas, test1, v, cuvant, roboti1, asfalt, grupe2, joc17, numar5, munte3
Despre matrice: vopsea, harta, opmat, sarpe, light, magic2, tetris, origami, concurs, iepuras, tribile, criptmat, cutie, patrate, 3d, pajura, perspic, vecini2, livada, matrice3, kafka, erdos, grup, scor2, reteta2, rezervatie, scoici, tablou, game, stea, submatrix, cifru, jokes, oua, trecere, na, dotnet, renju, ghici, mere1, agitatie, lacuri, sotron, desen1, camion, ceas1, fibo, parc, excursia, matricea, zidar, joc6, log, concurs2, cladiri, dist, centru, robinson, cuburi2, joc8, joc9, romeo, adevar, soricel2, avere, joc11, vizibil, sah1, blockout, masina3, lsort, anticip, matrice1, evantai, spion, pereti, zumzi, placare, tabel, ocr, numere7, lacusta, becuri, sir5, flori, cartele, furnica, pavare, poarta, rj, peri, poligon2, sablon1, gradina, matrice4, poartas, balcon, submdisj, v, matrx, figura, neuroni, raze, roboti1, bila, iepurasi, colorare, mat, submatrix1, simetric1, plaja, xor2, guess, albine1, joct, alfabetar, stele, tablou1, alpinist, cladire, cri, grupe2, el, mahjong, sir9, acces, tort1, joc17, mesaj3, zar1, xy, poteci, avioane, broscute, safeu, acoperire1, radioactiv, robot4, lcdr, jb, slide, maxtri, dame, triunghi4, elicop, compresie, mijloc, cubulete, romb, medalion, bile6, zigzag, puncte5, intersectii, matd3, matrixdel, speed, seif1, traseu2, incadrare, betasah, zona, latin, zmax, amestec, sudoku1, gradina1, spider, zone, bemo, rombul, interclasare, rebus1, tabla, arrows, pseudobil, patrat1, rascoala, harta2, relatii, lasere, defrag, matcnt, ssdj, cript, ssk, teren1, fence, cifre6
Despre simulare: lbd, iepuras, tren2, mgo, joc2, kafka, comori, loc, bile3, cat, felinare, spioni, lift, kalah, cutii, pesti, zar1, joc16, safeu, joc20, dame, conjectura, arc, wb, robot6
surse trimise | ajutor