集训作业 洛谷P1866 编号

这个题是个数学题啊。

总体思路不是很难,每个兔子有一个编号,只要不停的看下一个兔子有多少可选编号,再乘上之前的所有可能性就可以算出一共的编号方法。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long n,a[100],shu=1;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	sort(a,a+n);//把兔子的编号范围从大到小排序,这样前面的兔子可选编号一定再后面的兔子可选编号之内。
	for(int i=0;i<n;i++)
	{
		shu*=a[i]-i;//第i只兔子前面已经有i-1个编号被占用了,由于我从零开始,不用再给i-1。
		shu%=1000000007;//取模
	}
	cout<<shu<<endl;
	return 0;
}

总结:这个题应该算个数论模拟,不要想的太复杂。

原文地址:https://www.cnblogs.com/lichangjian/p/12853440.html