fork download
  1. program scoazze;
  2. (*algoritmo greedy: Pertanto, ogni giorno in cui riceviamo spazzatura, *)
  3. (*se siamo costretti a svuotare il cestino attuale, lo faremo, altrimenti *)
  4. (*aggiungendo alla dimensione del cestino la quantità di spazzatura raccolta *)
  5. (*nel passaggio corrente.Al termine svuotiamo tutti i cassonetti. *)
  6. (*Dobbiamo svuotare ciascun contenitore il più tardi possibile per ridurre al minimo*)
  7. (*la spesa*)
  8. const
  9. MAXN = 200000;
  10.  
  11. { input data }
  12. var
  13. N, K, i : longint;
  14. costototale, D:int64;
  15. C,T,Q,diff,price : array[0..MAXN-1] of int64;
  16.  
  17. begin
  18. {
  19.   uncomment the following lines if you want to read/write from files
  20.   assign(input, 'input.txt'); reset(input);
  21.   assign(output, 'output.txt'); rewrite(output);
  22. }
  23.  
  24. { read numbers N and K in a single line }
  25. readln(N, K);
  26. { read all numbers C[i] in the next line }
  27. for i:=0 to N-1 do
  28. begin
  29. read(C[i]);
  30. diff[i]:=C[i];
  31. price[i]:=0;
  32. end;
  33. readln();
  34. costototale:=0;
  35. for i:=0 to K-1 do
  36. begin
  37. read(T[i],Q[i]); readln;
  38. D:= diff[T[i]]-Q[i];
  39. if D>=0 then begin diff[T[i]]:=D; price[T[i]]:=price[T[i]]+diff[T[i]]; end
  40. else
  41. begin
  42. price[T[i]]:=price[T[i]]+diff[T[i]];
  43. diff[T[i]]:=C[T[i]]-Q[i];
  44. end;
  45. write(price[T[i]]); writeln;
  46. end;
  47. for i:=0 to N-1 do costototale:=costototale+price[i];
  48. writeln(costototale);
  49. for i:=0 to N-1 do write(price[i],' '); writeln;
  50. end.
  51.  
Success #stdin #stdout 0.01s 5300KB
stdin
5 7
66 73 68 79 78
2 50
3 69
0 1
2 20
4 12
1 44
3 11
stdout
18
10
65
36
66
29
20
216
65 29 36 20 66