Вырубка деревьев

Имя входного файла: input.txt
Имя выходного файла: output.txt
Максимальное время работы на одном тесте: 1 секунда
Максимальный объем используемой памяти: 64 мегабайта

 

Король Флатландии решил вырубить некоторые деревья, растущие перед его дворцом. Деревья перед дворцом короля посажены в ряд, всего там растет N деревьев, расстояния между соседними деревьями одинаковы.

После вырубки перед дворцом должно остаться M деревьев, и расстояния между соседними деревьями должны быть одинаковыми. Помогите королю выяснить, сколько существует способов вырубки деревьев.

Требуется написать программу, которая по заданным числам N и M определит, сколько существует способов вырубки некоторых из N деревьев так, чтобы после вырубки осталось M деревьев и соседние деревья находились на равном расстоянии друг от друга.

 

Формат входных данных

Входной файл INPUT.TXT содержит два целых числа M и N (0 <= M <= N <= 1000).

Формат выходных данных

В выходном файле OUTPUT.TXT должно содержаться одно число - искомое количество способов.

Пример входных и выходных данных

input.txt output.txt

5 3

 

4

 

Краткие методические рекомендации по решению задачи

Зафиксируем расстояние между деревьями после вырубки. Если оно равно d, то возможно
n – d(m – 1) – m + 1 способов вырубить деревья. Суммируя по всем d, получаем ответ.

Если у нас есть  0 деревьев и 0 деревьев должно остаться после вырубки, то существует один вариант вырубки - это надо учитывать при решении задачи.

Вариант 1 (с использованием цикла)

var
  n, m : longint;
  i, d, s : longint;
  input, output: text;
begin
  Assign(input,'input.txt');
  Reset(input);
  Assign(output,'output.txt');
  Rewrite(output);
  Read(input,n,m);
  s := 0;
  if m = 0 then 
    s := 1
  else 
    if m = 1 then 
      s := n
    else 
      for d := 1 to (n-1) div (m-1) do 
        inc(s,n-(m-1)*d);
  Write(output,s);
  Close(input);
  Close(output);
end.

 

Вариант 2 (без цикла)

var
  n, m ,k: longint;
  i, d, s : longint;
  input, output: text;
begin
  Assign(input,'input.txt');
  Reset(input);
  Assign(output,'output.txt');
  Rewrite(output);
  read(input,n,m);
  if m=0 then 
    s:=1
  else 
    if m=1 then 
      s:=n
    else
      begin
        k:=(n-1) div (m-1);{количество членов прогрессии}
        d:=m-1;{шаг прогрессии}
        s:=(2+(k-1)*d)*k div 2;{формула суммы первых членов арифметической прогрессии}
      end;
  write(output, s);
  Close(input);
  Close(output);
end.