SlepoiKrot

Untitled

Jan 5th, 2018
84
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. rogram sweets;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils;
  7. var
  8.   n, m, min, i, k, j, i1, min1, m1, min2: integer;
  9.   a: array [1..10003] of integer;
  10. begin
  11.   readln (n, m);
  12.   for i := 1 to n do begin
  13.     readln (a[i]);
  14.   end;
  15.   while (m <> 0) do begin
  16.     k := 1030001;
  17.     m1 := 0;
  18.     i1 := 0;
  19.     j := 0;
  20.     min2 := n + 3;
  21.     a[min2] := 1030001;
  22.     min := n + 1;
  23.     a[min] := 1030001;
  24.     min1 := n + 2;
  25.     a[min1] := 1030001;
  26.     for i := 1 to n do begin
  27.       if (a[i] < a[min]) then begin
  28.         a[min1] := a[min];
  29.         if (a[min] <> 1030001) then
  30.           k := a[min] - a[i]
  31.         else
  32.           k := 1030001;
  33.         min := i;
  34.       end
  35.       else if (a[i] = a[min]) then
  36.         inc (i1)
  37.       else if ((a[i] - a[min] < k) and (a[min] <> 1030001)) then begin
  38.         if (a[i] < a[min1]) then
  39.           a[min1] := a[i];
  40.         k := a[i] - a[min];
  41.       end;
  42.     end;
  43.     a[min2] := a[min];
  44.     if (i1 > 0) then begin
  45.       if (m div (i1 + 1) = 0) then begin
  46.       inc (a[min]);
  47.       m := m - 1;
  48.       continue;
  49.       end;
  50.       if (a[min] + m div (i1 + 1) > a[min1]) then
  51.         m1 := a[min1] - a[min]
  52.       else
  53.         m1 := m div (i1 + 1);
  54.       for i := 1 to n do begin
  55.         if (a[i] = a[min2]) then begin
  56.           a[i] := a[i] + m1;
  57.           inc (j);
  58.         end;
  59.         if (j = (i1 + 1)) then
  60.           break;
  61.       end;
  62.       m := m - m1 * (i1 + 1);
  63.       continue;
  64.     end;
  65.     if (k = 0) then
  66.       inc (k);
  67.     if (k >= m) then begin
  68.       k := m;
  69.     end;
  70.     inc (a[min], k);
  71.     m := m - k;
  72.   end;
  73.   min := 1030001;
  74.   for i := 1 to n do begin
  75.     if (a[i] < min) then
  76.       min := a[i];
  77.   end;
  78.   writeln (min);
  79.   readln;
  80.   readln;
  81. end.
RAW Paste Data