SGU 222 解题报告

http://acm.sgu.ru/problem.php?contest=0&problem=222

222. Little Rooks

time limit per test: 1 sec.
memory limit per test: 65536 KB

Inspired by a "Little Bishops" problem, Petya now wants to solve problem for rooks.

A rook is a piece used in the game of chess which is played on a board of square grids. A rook can only move horizontally and vertically from its current position and two rooks attack each other if one is on the path of the other.

Given two numbers n and k, your job is to determine the number of ways one can put k rooks on an n × n chessboard so that no two of them are in attacking positions.

受小主教问题的启发, Petya现在决定解决一个关于车的问题.

车是国际象棋中的一种棋子,只能在水平和垂直方向移动,如果在一个移动方向上有两个车,他们就会互相攻击.

给定两个数n和k,你的工作是要计算出在n× n的棋盘中放置K个车,使他们不会相互攻击的方案数量.

Input

The input file contains two integers n (1 ≤ n ≤ 10) and k (0 ≤ k ≤ n2).

Output

Print a line containing the total number of ways one can put the given number of rooks on a chessboard of the given size so that no two of them are in attacking positions.

Sample Input

4 4

Sample Output

24

CODE

#include<stdio.h>
#include<string.h>
 
long long f(int n)
{
  long long ans=1;
  while(n) ans*=n--;
  return ans;
}
 
int main()
{
  int n,k;
  scanf("%d%d",&n,&k);
  if(k>n) printf("0n");
  else printf("%lldn",f(k)*(f(n)/f(k)/f(n-k))*(f(n)/f(k)/f(n-k)));
  return 0;
}
» 本博客采用署名 2.5 中国大陆许可协议进行许可,本文版权归作者所有,欢迎转载,但必须在明显位置给出原文连接。
anyShare分享到:

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>