Fişierul intrare/ieşire:defrag.in, defrag.outSursăOJI 2015 clasa a 9-a
AutorCiprian ChescaAdăugată deCatalin.FrancuCatalin Francu Catalin.Francu
Timp execuţie pe test0.2 secLimită de memorie4096 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise

Defrag (clasa a 9-a)

Discul dur (hard disk) este un dispozitiv utilizat pentru stocarea datelor. Stocarea se face pe o suprafaţă magnetică dispusă pe platane rotunde metalice. Pe un platan, datele sunt organizate în piste şi sectoare, iar zona aflată la intersecţia dintre o pistă şi un sector poartă denumirea de cluster.

Un cluster poate avea două stări: liber, dacă nu conţine date, sau ocupat, atunci când conţine date.

Un platan se numeşte defragmentat dacă toţi clusterii ocupaţi de pe fiecare pistă sunt aşezaţi în ordine consecutivă. Defragmentarea se realizează prin mutarea unor clusteri ocupaţi şi are rolul de a micşora timpul de acces la date. Mutarea unui cluster reprezintă transferul datelor de la un cluster ocupat către un cluster liber de pe aceeaşi pistă. 

Cerinţă

Cunoscând numărul de piste P şi de sectoare S al unui platan, numărul şi poziţia clusterilor ocupaţi, să se scrie un program care determină:

  1. numărul de piste care au toţi clusterii liberi;
  2. numărul minim de mutări de clusteri, pentru fiecare pistă în parte, astfel încât platanul să devină defragmentat.

Date de intrare

Pe prima linie a fişierului de intrare defrag.in se găseşte numărul natural V a cărui valoare poate fi doar 1 sau 2.

Pe a doua linie a fişierului de intrare se găsesc două numere naturale P şi S, separate printr-un spaţiu, cu semnificaţia din enunţ.

A treia linie conţine un număr natural C reprezentând numărul total de clusteri ocupaţi de pe platan, iar pe fiecare din următoarele C linii se găseşte câte o pereche de valori pi şi si, 1 ≤ i ≤ C, separate printr-un spaţiu, reprezentând pista, respectiv sectorul unde se află fiecare cluster ocupat.

Date de ieşire

Fişierul de ieşire este defrag.out.

Dacă valoarea lui V este 1, atunci fişierul de ieşire va conţine pe prima linie un număr natural ce reprezintă numărul de piste care au toţi clusterii liberi.

Dacă valoarea lui V este 2, atunci fişierul de ieşire va conţine pe prima linie P numere naturale notate Mi, 1 ≤ i ≤ P, separate prin câte un singur spaţiu, unde Mi reprezintă numărul minim de mutări de clusteri, dintre cei aflaţi pe pista i, astfel încât pe pista i clusterii ocupaţi să se găsească într-o ordine consecutivă.

Restricţii şi precizări

  • 1 ≤ P ≤ 100
  • 1 ≤ S ≤ 360
  • 1 ≤ C ≤ P*S
  • pistele sunt numerotate de la 1 la P începând cu pista exterioară;
  • sectoarele sunt numerotate de la 1 la S în sensul acelor de ceasornic începând cu sectorul 1;
  • dacă o pistă are toţi clusterii liberi, atunci valoarea cerută la a doua cerinţă este 0;
  • 20% din teste vor avea valoarea V = 1, iar 80% din teste vor avea valoarea V = 2.

Exemple

defrag.indefrag.outExplicaţie
1
4 8
10
1 1
1 3
1 5
1 7
4 5
4 1
4 6
4 8
2 2
2 4
1
Datele corespund figurilor anterioare:
V = 1, deci se rezolvă numai prima cerinţă.
* Numărul de piste P = 4, numărul de sectoare S = 8
* Numărul total de clusteri ocupaţi este C = 10 (cei marcaţi cu negru)
* Pe prima pistă sunt 4 clusteri ocupaţi, în sectoarele 1, 3, 5 şi 7.
* Pe a doua pistă sunt 2 clusteri ocupaţi, în sectoarele 2 şi 4.
* Pe a treia pistă nu sunt clusteri ocupaţi.
* Pe a patra pistă sunt 4 clusteri ocupaţi, în sectoarele 1, 5, 6 şi 8.
O singură pistă are toţi clusterii liberi, pista numărul 3, deci valoarea cerută este 1.
2
4 8
10
1 1
1 3
1 5
1 7
4 5
4 1
4 6
4 8
2 2
2 4
2 1 0 1
Datele corespund figurilor anterioare :
V = 2, deci se rezolvă numai a doua cerinţă.
* Pe prima pistă sunt necesare minim două mutări de clusteri pentru ca toţi clusterii ocupaţi să se găsească într-o ordine consecutivă, deci valoarea cerută este 2.
* Pe a doua pistă este suficientă o singură mutare de cluster, pentru ca toţi clusterii ocupaţi să se găsească într-o ordine consecutivă, deci valoarea cerută este 1.
* Pe a treia pistă nu sunt clusteri ocupaţi, deci valoarea cerută este 0.
* Pe a patra pistă este suficientă o singură mutare de cluster, pentru ca toţi clusterii ocupaţi să se găsească într-o ordine consecutivă, deci valoarea cerută este 1.
Trebuie sa te autentifici pentru a trimite solutii. Click aici