Помощь - Поиск - Пользователи - Календарь
Полная версия: Расстановки ладей
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Unconnected
Привет всем.

Я решаю довольно тривиальную задачу, хочу разобраться. Нужно найти количество способов, коими на доске N*N можно расставить K ладей. Когда N=K - то всё понятно, на первой горизонтали можно поставить ладью N способами, на второй - N-1, и так далее, и в итоге количество вариантов равно N!. Тут же проблема в том, что N и K - числа от 1 до 8, и N может быть больше K. Я не знаю, какую формулу применить. Набросал код:

{$APPTYPE CONSOLE}
var n,k:byte;
function fact(n:byte):int64;
begin
if n=0 then result:=1 else result:=n*fact(n-1);
end;

begin
assign(input,'input.txt');
read(n,k);
assign(output,'output.txt');
if (k>0) then writeln((fact(n)*fact(n)) div fact(k)) else writeln(0); //можно конечно вычислять N! 1 раз
end.


, он правильно работает для входных данных 8 8, 8 7 (N и K соответственно), да и на некоторых других вроде как тоже правильно. Такую формулу я вывел сам, посмотрев на соотношения должных результатов, скорее всего, это какая-то неправильная формула) Ну у Виленкина под именно этот случай (когда K может быть меньше N) я не нашёл рецепта.
volvo
Вот этот докУмент изучи, там все, что тебе нужно - написано...
Unconnected
Спасибо, занимательный докУмент. Прочитал первые несколько страниц, и понял, как решать. Вот что получилось:

{$APPTYPE CONSOLE}
var n,k:byte;
function fact(n:byte):int64;
begin
if n=0 then result:=1 else result:=n*fact(n-1);
end;

begin
assign(input,'input.txt');
read(n,k);
assign(output,'output.txt');
writeln(sqr(fact(n) div (fact(n-k)*fact(k)))*fact(k));
end.
Unconnected
Только вот что-то олимпиадная система ругается на код, на неких входных данных вылетает RE. Я установил, что это получается, когда во входных данных K>N. Но ведь тогда все ладьи расставить невозможно! В ограничениях, данных в условии, написано N,K<=8, хотя наверное должно было быть K<=N<=8.

Added: ну да, и вывести надо было 0. smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.