SRM463 Div1 Easy(250), Div2 Medium(500) RabbitNumbering
RabbitNumbering
例えば、ソートしたmaxNumberが{2,3,5,8}ならば、1番目の兎は2通り、2番目の兎は1番目の兎に付けた番号は使えないので3-1=2通り、3番目の兎は1,2番目の兎に付けた番号は使えないので5-2=3通りの選び方がある。
#include <vector> #include <algorithm> using namespace std; class RabbitNumbering { public: int theCount( vector <int> maxNumber ); }; int RabbitNumbering::theCount( vector <int> maxNumber ) { sort( maxNumber.begin(), maxNumber.end() ); long long r = 1; for ( int i=0; i<(int)maxNumber.size(); i++ ) r = r * max(0,maxNumber[i]-i) % 1000000007; return (int)r; }