玫瑰花题目虽然有重复,应该可以利用容斥原理计算(去除重复元素):
例1: n= 3 k =2 结果为6
解释:(2^3) - C21 (1^3) = 14
k中颜色全排列 - 选出k-1中颜色全排列
例2: n= 4 k =3 结果为 36
解释: (3^4) - C3 2 (2^4) + C31 (1^4) = 36
k中颜色全排列 - 选出k-1种颜色全排列 + 选出k-2中颜色全排列
// n!
int n_1(int n)
{
if(n ==0)
return 1;
int temp =1;
for(int i=n;i>=1;i--)
temp = temp * i % mod ;
return temp;
}
// k^n
int k_n(int k,int n)
{
int temp = 1;
while(n>=1)
{
temp = temp*k% mod ;
n--;
}
return temp;
}
int main()
{
int n,k;
while(cin >> n >>k)
{
int sign = 1, result =0;
if(n < k)
cout << 0 << endl;
else
for(int i=k;i>0;i--,sign*=-1)
//C(下标n,上标k) = n! / ((n-k)! * k!)
result += sign * k_n(i,n) * n_1(k) / (n_1(i) * n_1(k -i));
cout << result << endl;
}
return 0;
}