一、题目
Problem #2017 - ECNU Online Judge
二、思路
一开始以为是全排列+验证的问题,后来超时,然后转向组合排列思考,结果AC了
首先要知道:n个不同元素的圆排列有(n-1)!个
证明:将个n 元素中的某个元素看成是固定的,剩下的 n-1个元素所作成的线性排列,其总数就相当于n个元素的圆排列总数。因此,n 个不同元素的圆排列总数为(n-1)!,自己草稿纸比划比划
最后就是组合排列了C(n,r)✖A(r-1)
三、代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
int r = sc.nextInt();
if (r == 0)
System.out.println(1);
else {
System.out.println(C(n, r));
}
}
}
public static long C(int n, int r) {
long ans = 1;
for (int i = n; i >= n - r + 1; i--) {
ans *= i;
}
return ans / r;
}
}