Atmiņas iedalīšana

ID: malloc
Grūtība: 3/5
Laika limits: 5

Uzdevums

Uzrakstiet programmu, kas simulē atmiņas iedalīšanas komandu izpildi!

Atmiņa ir virkne, kas sastāv no 100,000 sekojošām atmiņas vienībām, kas sanumurētas ar skaitļiem no 1 līdz 100,000. Sākumā visas vienības ir brīvas.

Iespējamās komandas ir:

  1. var=malloc(size);
    Šī funkcija atrod pirmās size (100 ≤ size ≤ 100,000) pēc kārtas sekojošas brīvas atmiņas vienības un iedala tās. Funkcija atgriež pirmās iedalītās vienības adresi vai arī skaitli 0, ja atmiņu iedalīt nav iespējams.
  2. free(var);
    Šī funkcija atbrīvo visas mainīgajam var iedalītās atmiņas vienības (pēc komandas malloc lietošanas) un uzstāda var vērtību uz 0. Ja mainīgā var vērtība jau ir 0, tad nekas netiek darīts.
  3. print(var);
    Šī funkcija izdrukā mainīgā var vērtību.

Mainīgie ir simbolu virknes, kas sastāv no precīzi četriem maziem latīņu alfabēta burtiem. Dažādu mainīgo skaits nepārsniedz 1000. Visu mainīgo sākuma vērtības vienādas ar 0.

 

Ievaddati

Teksta faila malloc.dat pirmajā rindā dots vesels skaitlis N, 1 ≤ N ≤ 100,000, - komandu skaits (vismaz viena komanda būs 'print').

Katrā no nākamajām N rindām dota viena komanda. Komandas dotas to izpildes secībā.

 

Izvaddati

Teksta failā malloc.rez jāizvada visu komandu 'print' rezultāti tādā secībā, kādā tās parādās ievaddatos. Katrs rezultāts jāizvada atsevišķā rindā.

 

Piemērs

malloc.datmalloc.rez
3
mama=malloc(140);
tata=malloc(120);
print(tata);
141
  
malloc.datmalloc.rez
aabb=malloc(50001);
bbaa=malloc(50000);
print(aabb);
free(aabb);
print(bbaa);
1
0
  
malloc.datmalloc.rez
5
baka=malloc(214);
baka=malloc(123);
free(baka);
deda=malloc(100);
print(deda);
215

 

Atsauces

Uzdevums izmantots Horvātijas informātikas olimpiādē 2004.gadā
© 2001-2002 olimps! http://www.lio.lv/olimps/