A(A也是他的编号)是一个孤傲的人,在一个n个人(其中编号依次为1到n)的队列中,他于其中的标号为b和标号c的人都有矛盾,所以他不会和他们站在相邻的位置。现在问你满足A的要求的对列有多少种?
给定人数n和三个人的标号A,b和c,请返回所求答案,保证人数小于等于11且大于等于3。
6,1,2,3
288
class LonelyA {
public:
int getNum(int n)
{
if(n==1)
return 1;
else
return getNum(n-1)*n;
}
int getLeftNum(int n)
{
return (n-3)*getNum(n-2);
}
int getMidNum(int n)
{
return 2*Cmn(n-3,2)*getNum(n-3);
}
int Cmn(int m,int n)
{
if(m<n)
return 0;
if(m==n||n==0)
return 1;
return Cmn(m-1,n)+Cmn(m-1,n-1);
}
int getWays(int n, int A, int b, int c) {
// write code here
if(n==3)
return 0;
int left=getLeftNum(n);
int middle=getMidNum(n);
return 2*left+middle*(n-2);
}
};