fork download
  1. program ristorante;
  2. const maxN=100000;
  3. maxM=200000;
  4. type elenco=array [1..maxN] of longint;
  5. var N,M,D,i, guadagno, ricavo:longint;
  6. costi:array[1..maxN] of longint;
  7.  
  8. Procedure scambia (var a,b: longint);
  9. var x:longint;
  10. begin
  11. x:=a;
  12. a:=b;
  13. b:=x;
  14. end;
  15. Procedure ordinamento (estremoi,estremos: longint; var v : elenco; ordinato:boolean);
  16. var inf, sup, medio:longint;
  17. pivot :longint;
  18. begin
  19. inf:=estremoi;
  20. sup:=estremos;
  21. medio:= (estremoi+estremos) div 2;
  22. pivot:=v[medio];
  23. repeat
  24. if (ordinato) then
  25. begin
  26. while (v[inf]<pivot) do inf:=inf+1;
  27. while (v[sup]>pivot) do sup:=sup-1;
  28. end;
  29. if inf<=sup then
  30. begin
  31. scambia(v[inf],v[sup]);
  32. inf:=inf+1;
  33. sup:=sup-1;
  34. end;
  35. until inf>sup;
  36. if (estremoi<sup) then ordinamento(estremoi,sup,v,ordinato);
  37. if (inf<estremos) then ordinamento(inf,estremos,v,ordinato);
  38. end;
  39.  
  40. begin
  41. readln(N,D);
  42. ricavo:=0; guadagno:=0;
  43. for i:=1 to N do begin read(costi[i]); ricavo:=ricavo+costi[i]; end; readln;
  44. readln(M);
  45. ordinamento (1,N,costi,true);
  46. if M>=N then guadagno:=ricavo-(M-N)*D
  47. else for i:=1 to M do guadagno:=guadagno+costi[i];
  48. writeln(guadagno);
  49. end.
Success #stdin #stdout 0s 5276KB
stdin
5 10
6 3 4 1 5
6
stdout
9