うさぎ同士のmaxNumberを入れ替えても、答えは変わらない => とりあえず昇順にソート
0番のうさぎに割り当てた番号以外を1番に割り当てる。
1番のうさぎに割り振る番号の選択肢は、maxNumber[1] - 1 通り。
同様に、2番のうさぎに割り当てる番号の選択肢は、0番と1番に割り振った数字以外。
つまり、maxNumber[2] - 2 通り。
i番のうさぎに割り当てる数字の選択肢は、maxNumber[i] - i 通り。
typedef long long lli;
class RabbitNumbering {
public:
int theCount(vector <int> num) {
sort( num.begin(), num.end() );
for(int i=0; i<num.size(); ++i){
num[i] -= i;
}
const lli mod = 1000000007;
lli ret = 1;
for(int i=0; i<num.size(); ++i){
if( num[i] <= 0 )return 0;
ret *= num[i];
ret %= mod;
}
return ret;
}
};
0 件のコメント :
コメントを投稿