SlepoiKrot

Untitled

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