#5005
Se dau 𝑁 procese care trebuie rulate pe un calculator. Există 𝑀 variabile care pot fi accesate de către aceste procese, numerotate de la 1 la 𝑀. Fiecare proces 𝑖 (unde 1 ≤ 𝑖 ≤ 𝑁) accesează un interval continuu de variabile [𝑙[𝑖], 𝑟[𝑖]], iar timpul necesar de execuție al procesului 𝑖 este 𝑡[𝑖].
Cât timp un proces rulează, acesta își salvează pe stiva de execuție toate variabilele necesare, iar la finalizarea lui le elimină de pe stivă. Două procese pot rula în paralel dacă și numai dacă nu au nicio variabilă în comun.
Sistemul de operare va planifica procesele astfel încât timpul total necesar executării tuturor să fie minim. O astfel
de planificare, care atinge timpul minim posibil, poartă numele de scenariu optim de execuție.
O variabilă este considerată critică dacă există cel puțin un scenariu optim de execuție în care aceasta petrece cel mai mult timp pe stivă dintre toate variabilele (într-un scenariu pot exista mai multe variabile critice simultan).
Dat fiind un număr 𝐶 ∈ {1, 2, 3}, reprezentând tipul cerinței:
Cerința 1. Să se determine timpul minim necesar pentru a rula toate cele 𝑁 procese date.
Cerința 2. Pentru fiecare proces 𝑖 (de la 1 la 𝑁), presupunem că îl eliminăm din sistem. Fie 𝑇[𝑖] timpul minim necesar pentru a rula restul de 𝑁 − 1 procese. Să se calculeze și să se afișeze suma tuturor valorilor 𝑇[𝑖], pentru 𝑖 de la 1 la 𝑁.
Cerința 3. Pentru fiecare proces 𝑖 (de la 1 la 𝑁), presupunem că îl eliminăm din sistem. Fie 𝑉[𝑖] numărul de variabile critice în contextul celorlalte 𝑁 − 1 procese, conform definiției anterioare. Să se calculeze și să se afișeze suma tuturor valorilor 𝑉[𝑖], pentru 𝑖 de la 1 la 𝑁.
| Problema | Calculator1 | Operații I/O |
calculator1.in/calculator1.out
|
|---|---|---|---|
| Limita timp | 1.7 secunde | Limita memorie |
Total: 512 MB
/
Stivă 64 MB
|
| Id soluție | #65018694 | Utilizator | |
| Fișier | calculator1.cpp | Dimensiune | 11.57 KB |
| Data încărcării | 16 Iulie 2026, 09:21 | Scor/rezultat | 100 puncte |
calculator1.cpp: In function ‘int main()’: calculator1.cpp:185:12: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 185 | freopen("calculator1.in", "r", stdin); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ calculator1.cpp:186:12: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 186 | freopen("calculator1.out", "w", stdout); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In function ‘uint64_t packState(uint32_t, uint32_t, uint32_t)’, inlined from ‘int main()’ at calculator1.cpp:213:31: calculator1.cpp:61:12: warning: ‘l’ may be used uninitialized [-Wmaybe-uninitialized] 61 | return uint64_t(l) | ^~~~~~~~~~~ calculator1.cpp: In function ‘int main()’: calculator1.cpp:207:18: note: ‘l’ was declared here 207 | uint32_t l, len, t; | ^ In function ‘uint64_t packState(uint32_t, uint32_t, uint32_t)’, inlined from ‘int main()’ at calculator1.cpp:213:31: calculator1.cpp:62:13: warning: ‘len’ may be used uninitialized [-Wmaybe-uninitialized] 62 | | (uint64_t(len) << FIELD_BITS) | ^~~~~~~~~~~~~ calculator1.cpp: In function ‘int main()’: calculator1.cpp:207:21: note: ‘len’ was declared here 207 | uint32_t l, len, t; | ^~~ In function ‘uint64_t packState(uint32_t, uint32_t, uint32_t)’, inlined from ‘int main()’ at calculator1.cpp:213:31: calculator1.cpp:63:13: warning: ‘t’ may be used uninitialized [-Wmaybe-uninitialized] 63 | | (uint64_t(t) << TIME_SHIFT); | ^~~~~~~~~~~ calculator1.cpp: In function ‘int main()’: calculator1.cpp:207:26: note: ‘t’ was declared here 207 | uint32_t l, len, t; | ^
| Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
|---|---|---|---|---|---|---|
| 1 | 0.002 secunde | OK. | 3 | 3 | ||
| 2 | 0.002 secunde | OK. | 3 | 3 | ||
| 3 | 0.001 secunde | OK. | 3 | 3 | ||
| 4 | 0.006 secunde | OK. | 3 | 3 | ||
| 5 | 0.006 secunde | OK. | 3 | 3 | ||
| 6 | 0.006 secunde | OK. | 3 | 3 | ||
| 7 | 0.002 secunde | OK. | 3 | 3 | ||
| 8 | 0.004 secunde | OK. | 3 | 3 | ||
| 9 | 0.002 secunde | OK. | 3 | 3 | ||
| 10 | 0.001 secunde | OK. | 3 | 3 | ||
| 11 | 0.001 secunde | OK. | 3 | 3 | ||
| 12 | 0.002 secunde | OK. | 3 | 3 | ||
| 13 | 0.016 secunde | OK. | 3 | 3 | ||
| 14 | 0.008 secunde | OK. | 3 | 3 | ||
| 15 | 0.013 secunde | OK. | 3 | 3 | ||
| 16 | 0.278 secunde | OK. | 3 | 3 | ||
| 17 | 0.259 secunde | OK. | 3 | 3 | ||
| 18 | 0.274 secunde | OK. | 3 | 3 | ||
| 19 | 0.274 secunde | OK. | 3 | 3 | ||
| 20 | 0.837 secunde | OK. | 3 | 3 | ||
| 21 | 0.92 secunde | OK. | 2 | 2 | ||
| 22 | 0.805 secunde | OK. | 2 | 2 | ||
| 23 | 0.808 secunde | OK. | 2 | 2 | ||
| 24 | 0.004 secunde | OK. | 2 | 2 | ||
| 25 | 0.002 secunde | OK. | 2 | 2 | ||
| 26 | 0.002 secunde | OK. | 2 | 2 | ||
| 27 | 0.002 secunde | OK. | 2 | 2 | ||
| 28 | 0.002 secunde | OK. | 2 | 2 | ||
| 29 | 0.002 secunde | OK. | 2 | 2 | ||
| 30 | 0.017 secunde | OK. | 2 | 2 | ||
| 31 | 0.011 secunde | OK. | 2 | 2 | ||
| 32 | 0.007 secunde | OK. | 2 | 2 | ||
| 33 | 0.294 secunde | OK. | 2 | 2 | ||
| 34 | 0.293 secunde | OK. | 2 | 2 | ||
| 35 | 0.293 secunde | OK. | 2 | 2 | ||
| 36 | 0.287 secunde | OK. | 2 | 2 | ||
| 37 | 0.889 secunde | OK. | 2 | 2 | ||
| 38 | 1.008 secunde | OK. | 2 | 2 | ||
| 39 | 1.291 secunde | OK. | 2 | 2 | ||
| 40 | 0.905 secunde | OK. | 2 | 2 | ||
| Punctaj total | 100 | |||||
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Calculator1 face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.