printРабочее место участника

printЗадачи

1489. Монеты

Ограничения: время – 200ms/500ms, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Среди `n` монет (`2\ ≤\ n\ ≤\ 1000`) могут быть фальшивые, они имеют одинаковый вес и легче настоящих. Про одну из монет известно, что она является настоящей. Необходимо за минимальное количество взвешиваний на чашечных весах без гирь определить количество настоящих монет.
Вы должны написать функцию с именем calc, возвращающую количество настоящих монет среди `n` монет.
int calc(int n); // С/С++
function calc(n:integer):integer; // Pascal
Для выполнения взвешивания ваша функция должна вызывать функцию compare.
int compare(int k, int left[], int right[]); // С/С++
function compare(k:integer; left, right:array of integer):integer; // Pascal
В качестве аргументов необходимо указать количество и номера монет, которые нужно положить на левую и правую чашу весов. Можно класть на чаши только одинаковое количество монет и нельзя указывать один и тот же номер монеты дважды. Нумерация монет начинается с 1. Монета с номером 1 является настоящей. Функция возвращает значение 0, если веса монет на обоих чашах равны, значение `-1`, если вес монет на левой чаше меньше, чем на правой, или значение 1, если вес монет на левой чаше больше.
Пересылаемое на проверку решение должно содержать только функцию calc, вспомогательные функции, команды #include (в C/C++) и глобальные переменные. В функциях не должен выполняться ввод или вывод.
Пример программы на С/C++
int calc(int n)
{ int left[1000],right[1000],i,k=1;
  left[0]=1;
  for(i=2; i<=n; ++i)
  { right[0]=i;
    if(compare(1,left,right)==0) ++k;
  }
  return k;
}
Пример программы на Pascal
var left,right:array[1..1000] of integer;
function calc(n:integer):integer;
var i,k:integer;
begin
  k:=1;
  left[1]:=1;
  for i:=2 to n do
  begin
    right[1]:=i;
    if compare(1,left,right)=0 then
      inc(k);
  end;
  calc:=k;
end;
Решение участника, который определит количество настоящих монет за наименьшее количество взвешиваний, получает оценку 100 баллов. Решение, которое определяет количество настоящих монет за `n-1` взвешивание или больше, получает оценку 0 баллов. Остальные решения получают оценку пропорционально достигнутым результатам по сравнению с лучшим решением.
loading