calculator

Time limit: 1.7s Memory limit: 512MB Input: calculator.in Output: calculator.out

Se dau NN procese care trebuie rulate pe un calculator. Există MM variabile care pot fi accesate de către aceste procese, numerotate de la 11 la MM. Fiecare proces ii (unde 1iN1 \leq i \leq N) accesează un interval continuu de variabile [li,ri][l_i, r_i], iar timpul necesar de execuție al procesului ii este tit_i.

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).

Cerințe

Dat fiind un număr C{1,2,3}C \in \{1, 2, 3\}, reprezentând tipul cerinței:

Cerința 1. Să se determine timpul minim necesar pentru a rula toate cele NN procese date.

Cerința 2. Pentru fiecare proces ii (de la 11 la NN), presupunem că îl eliminăm din sistem. Fie TiT_i timpul minim necesar pentru a rula restul de N1N - 1 procese. Să se calculeze și să se afișeze suma tuturor valorilor TiT_i, pentru ii de la 11 la NN.

Cerința 3. Pentru fiecare proces ii (de la 11 la NN), presupunem că îl eliminăm din sistem. Fie ViV_i numărul de variabile critice în contextul celorlalte N1N - 1 procese, conform definiției anterioare. Să se calculeze și să se afișeze suma tuturor valorilor ViV_i, pentru ii de la 11 la NN.

Generarea datelor

Pentru a evita citirea unui volum foarte mare de date, doar primele KK procese vor fi citite din fișierul de intrare sub forma unor triplete (li,leni,ti)(l_i, \text{len}_i, t_i), pentru ii de la 11 la KK. Pentru cerința C=1C = 1, se garantează că N=KN = K, deci nu este necesară nicio generare suplimentară.

Pentru cerințele C{2,3}C \in \{2, 3\}, se citesc doar primele KK procese. Restul proceselor, de la K+1K + 1 până la NN, se vor genera în programul vostru folosind următorul algoritm:

pentru i ← K + 1, N execută
    l_i ← ((l_{i-1} xor (a · l_{i-K})) mod M) + 1
    len_i ← ((len_{i-1} xor (b · len_{i-K})) mod M) + 1
    t_i ← ((t_{i-1} xor (c · t_{i-K})) mod T) + 1
sfârșit pentru

Notă: Operația logică pe biți XOR/"SAU exclusiv" este reprezentată în C/C++ prin operatorul ^.

Pentru toate procesele (indiferent dacă au fost citite sau generate), capătul drept al intervalului accesat de procesul ii se va calcula după formula:

ri=li+(leni mod(Mli+1))r_i = l_i + (\text{len}_i \text{ mod} (M - l_i + 1))

Date de intrare

Fișierul de intrare calculator.in conține pe prima linie numerele CC, NN, MM, KK, TT, urmate de constantele aa, bb și cc, separate prin câte un singur spațiu. Pe următoarele KK linii se vor afla câte trei numere: lil_i, leni\text{len}_i și tit_i, care reprezintă informațiile pentru primele KK procese (unde 1iK1 \leq i \leq K).

Date de ieșire

Fișierul de ieșire calculator.out va conține pe o singură linie un singur număr natural, reprezentând răspunsul calculat conform cerinței CC.

Restricții și precizări

  • 1N,M5 000 0001 \leq N, M \leq 5 \ 000 \ 000
  • 1Kmin(N,100 000)1 \leq K \leq \min(N, 100 \ 000)
  • 1T10 0001 \leq T \leq 10 \ 000
  • 1li,leniM1 \leq l_i, \text{len}_i \leq M și 1tiT1 \leq t_i \leq T, pentru orice 1iK1 \leq i \leq K
  • 1a,b,c1 000 000 0001 \leq a, b, c \leq 1 \ 000 \ 000 \ 000
  • Atenție: Calculele intermediare din algoritmul de generare a datelor pot depăși capacitatea de reprezentare a tipurilor întregi pe 32 de biți (de exemplu int sau unsigned int). Se recomandă și utilizarea tipurilor de date pe 64 de biți (de exemplu long long) unde este cazul.
# Punctaj Restricții
1 15 C=1C = 1, 1N,M2 0001 \leq N, M \leq 2 \ 000, K=NK = N
2 15 C=1C = 1, 1N,M100 0001 \leq N, M \leq 100 \ 000, K=NK = N
3 5 C=2C = 2, 1N,M2001 \leq N, M \leq 200, K=NK = N
4 5 C=2C = 2, 1N,M2 0001 \leq N, M \leq 2 \ 000, K=NK = N
5 10 C=2C = 2, 1N,M100 0001 \leq N, M \leq 100 \ 000, K=NK = N
6 5 C=2C = 2, 1N,M2 000 0001 \leq N, M \leq 2 \ 000 \ 000
7 10 C=2C = 2
8 5 C=3C = 3, 1N,M2001 \leq N, M \leq 200, K=NK = N
9 5 C=3C = 3, 1N,M2 0001 \leq N, M \leq 2 \ 000, K=NK = N
10 10 C=3C = 3, 1N,M100 0001 \leq N, M \leq 100 \ 000, K=NK = N
11 5 C=3C = 3, 1N,M2 000 0001 \leq N, M \leq 2 \ 000 \ 000
12 10 C=3C = 3

Exemplul 1

calculator.in

1 3 5 3 10 1 1 1
1 3 5
3 3 4
4 2 2

calculator.out

9

Explicație

Pentru toate exemplele, avem N=3N = 3 procese și M=5M = 5 variabile. Procesele sunt:

  • Procesul 1: l1=1l_1 = 1, r1=1+(3 mod 5)=4r_1 = 1 + (3 \text{ mod } 5) = 4, timp t1=5t_1 = 5. Intervalul este [1,4][1, 4].
  • Procesul 2: l2=3l_2 = 3, r2=3+(3 mod 3)=3r_2 = 3 + (3 \text{ mod } 3) = 3, timp t2=4t_2 = 4. Intervalul este [3,3][3, 3].
  • Procesul 3: l3=4l_3 = 4, r3=4+(2 mod 2)=4r_3 = 4 + (2 \text{ mod } 2) = 4, timp t3=2t_3 = 2. Intervalul este [4,4][4, 4].

Analizând interacțiunea dintre procese se observă că:

  • Procesul 1 are variabile comune atât cu Procesul 2 (variabila 33), cât și cu Procesul 3 (variabila 44). Prin urmare, P1P_1 nu poate rula în paralel cu P2P_2 sau P3P_3.
  • Procesul 2 și Procesul 3 nu au nicio variabilă în comun, deci pot rula simultan.

Pentru primul exemplu (C=1C = 1): Într-un scenariu optim, P1P_1 rulează singur (55 unități de timp), iar P2P_2 și P3P_3 rulează în paralel. Timpul necesar pentru grupul {P2,P3}\{P_2, P_3\} este max(t2,t3)=4\max(t_2, t_3) = 4. Timpul total minim este 5+4=95 + 4 = 9.

Exemplul 2

calculator.in

2 3 5 3 10 1 1 1
1 3 5
3 3 4
4 2 2

calculator.out

20

Explicație

Pentru al doilea exemplu (C=2C = 2):

  • Eliminăm P1P_1: Rămân P2P_2 și P3P_3, care rulează în paralel. T1=max(4,2)=4T_1 = \max(4, 2) = 4.
  • Eliminăm P2P_2: Rămân P1P_1 și P3P_3. Deoarece au variabila 44 în comun, trebuie să ruleze secvențial. T2=5+2=7T_2 = 5 + 2 = 7.
  • Eliminăm P3P_3: Rămân P1P_1 și P2P_2. Au variabila 33 în comun, deci rulează secvențial. T3=5+4=9T_3 = 5 + 4 = 9.

Suma rezultatelor este 4+7+9=204 + 7 + 9 = 20.

Exemplul 3

calculator.in

3 3 5 3 10 1 1 1
1 3 5
3 3 4
4 2 2

calculator.out

3

Explicație

Pentru al treilea exemplu (C=3C = 3):

  • Fără P1P_1: Timpul optim este 44. Variabila 33 stă pe stivă timp de 44 unități (cât rulează P2P_2), iar variabila 44 stă pe stivă 22 unități (cât rulează P3P_3). Singura variabilă critică este variabila 33. V1=1V_1 = 1.
  • Fără P2P_2: Timpul optim este 77. Procesele P1P_1 și P3P_3 rulează pe rând. Variabila 44 stă pe stivă în total 5+2=75 + 2 = 7 unități, fiind singura care atinge acest timp maxim. V2=1V_2 = 1.
  • Fără P3P_3: Timpul optim este 99. Procesele P1P_1 și P2P_2 rulează pe rând. Variabila 33 stă pe stivă în total 5+4=95 + 4 = 9 unități, fiind singura variabilă critică. V3=1V_3 = 1.

Suma valorilor ViV_i este 1+1+1=31 + 1 + 1 = 3.

Log in or sign up to be able to send submissions!