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,bidone,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. bidone[i]:=0;
  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. if C[T[i]]-(bidone[T[i]]+Q[i])>=0 then bidone[T[i]]:=bidone[T[i]]+Q[i]
  39. else
  40. begin
  41. costototale:=costototale+(C[T[i]]-bidone[T[i]]);
  42. bidone[T[i]]:=Q[i];
  43. end;
  44.  
  45. end;
  46.  
  47. for i:=0 to N-1 do costototale:=costototale+c[i]-bidone[i];
  48. writeln(costototale);
  49. for i:=0 to N-1 do write(bidone[i],' '); writeln;
  50. end.
  51.  
Success #stdin #stdout 0s 5288KB
stdin
5 7
66 73 68 79 78
2 50
3 69
0 1
2 20
4 12
1 44
3 11
stdout
304
1 44 20 11 12