www.agora.ro

Runda 4

CR4P1 Labirint

Tom și Jerry se află într-un labirint dreptunghiular de dimensiuni mŽn (1Łm, nŁ100). Scrieți un program care determină în mai puțin de o secundă lungimea drumului minim dintre pozițiile celor doi, precum și numărul de drumuri de lungime minimă dintre cele două poziții.

Fiecare căsuță din labirint poate fi despărțită de cele patru căsuțe vecine prin ziduri; în cazul în care între două căsuțe vecine nu există un zid, există posibilitatea deplasării din una dintre aceste căsuțe în alta.

Datele de intrare se citesc din fișierul TOMJERRY.IN care va conține pe prima linie numerele m și n, separate printr-un singur spațiu, pe a doua linie patru numere întregi (x1 y1 x2 y2) reprezentând pozițiile lui Tom, respectiv Jerry. Pe următoarele m linii se află câte n numere naturale din intervalul [0, 15] care reprezintă codificarea caracteristicilor fiecărei căsuțe.

Fiecăreia dintre cele patru direcții îi corespunde un bit din reprezentarea numărului respectiv (bitul 0 corespunde direcției Nord, bitul 1 direcției Est, bitul 2 direcției Sud, iar bitul 3 direcției Vest).

În cazul în care într-o anumită direcție există zid, valoarea bitului corespunzător va fi 1, în caz contrar această valoare va fi 0. De exemplu, pentru o căsuță care are ziduri la Vest și la Nord codificarea va fi 9=10012 (biții corespunzători celor două direcții în care există ziduri au valoarea 1, restul biților au valoarea 0).

Datele de ieșire vor fi scrise în fișierul TOMJERRY.OUT care va conține două linii; pe prima linie va apărea lungimea drumului minim dintre pozițiile celor doi, iar pe a doua linie numărul de drumuri de lungime minimă care există între cele două poziții.

Exemplu

Pentru labirintul din figură, fișierul TOMJERRY.IN va fi următorul:

4 4

1 1 4 4

11 9 7 11

12 4 1 6

13 3 8 3

13 4 4 6

Fișierul TOMJERRY.OUT va trebui să fie

7

2

deoarece Tom trebuie să se deplaseze prin 5 căsuțe intermediare pentru a ajunge la Jerry, deci distanța totală este 7 (sunt incluse și căsuțele în care se află cei doi la început) și există două drumuri de lungime 7 care pot fi alese, și anume cele prezentate mai jos.

Observații

1. Nu există ieșire din labirint, adică celulele de pe margine vor avea întotdeauna ziduri spre exterior.

2. Există întotdeauna un drum de la poziția lui Tom la cea a lui Jerry.

3. Nu vor apărea contradicții în descrierea căsuțelor labirintului. De exemplu, dacă o căsuță are zid înspre Sud atunci căsuța din Sud va avea obligatoriu zid înspre Nord.

CR4P2 Star Trek

Planeta GInfo IV a fost descoperită aproape concomitent de către klingonieni și romulani. Fiecare dintre cele două rase a stabilit mai multe baze pe planetă.

Consiliile Imperiale de pe Klingon și Romulus au decis că nu își pot permite să pornească un război pentru această planetă și au hotărât să împartă planeta. Fiecare imperiu ar dori să obțină o zonă care să aibă perimetru minim, pentru a fi mai ușor de apărat și care să cuprindă toate bazele stabilite de către acel imperiu pe planetă.

Datorită faptului că bazele au fost stabilite aproape aleator pe planetă neținându-se cont de existența celeilalte rase, cele două zone revendicate de cele două imperii ar putea să aibă porțiuni comune.

Scrieți un program care determină în mai puțin de cinci secunde aria zonei de conflict (zonă revendicată atât de romulani cât și de klingonieni).

Datele de intrare se citesc din fișierul STARTREK.IN care va conține pe prima linie numărul N (1ŁNŁ100) al bazelor romulane, pe următoarele N linii coordonatele celor N baze (două numere naturale mai mici decât 2457 separate printr-un spațiu), pe următoarea linie numărul M (1ŁMŁ100) al bazelor klingoniene, pe următoarele M linii coordonatele celor M baze (două numere naturale mai mici decât 2457 separate printr-un spațiu).

Fișierul de ieșire va trebui să conțină aria zonei de conflict cu o aproximație de 1 miime.

Exemplu

În figură bazele romulane sunt reprezentate prin cerculețe iar cele klingoniene prin pătrățele. Zona revendicată de romulani este cea deschisă la culoare, iar cea revendicată de klingonieni este mai închisă. Zona de conflict este hașurată. Pentru acest exemplu fișierul STARTREK.IN va conține:

8

1 7

2 6

3 4

3 9

5 10

6 8

7 9

7 4

7

5 6

5 1

7 2

8 4

9 1

9 6

10 4

Fișierul de ieșire STARTREK.OUT poate conține orice număr din intervalul [3.999, 4.001].

CR4P3 Ordonare

În fișierul NUMERE.IN se află cel mult 500000 de numere naturale distincte din intervalul [0, 999999], câte unul pe o linie.

Să se scrie în fișierul NUMERE.OUT o listă ordonată crescător a acestor numere, câte un număr pe o linie. Programul va trebui să funcționeze în cel mult cinci secunde.

Exemplu

NUMERE.IN NUMERE.OUT

2457 8

35 35

87 87

8 2000

2000 2457

8888 7452

9999 8888

7452 9999

[cuprins]