SRM 463 div1 easy: RabbitNumbering
解法
数字を小さい順に並べると, i+1 番目の数字は, i 番目の数字が取れる数字はもちろん取れるし, それより大きな数字も取りうる可能性があります。よって, 数字を小さい順に並べて i 番目の数が取りうる数字の場合の数 maxNumber[i]-i を掛け算していけば OK です。
ll MOD = 1e9+7; class RabbitNumbering { public: int theCount(vector <int> maxNumber) { int n = maxNumber.size(); sort(maxNumber.begin(), maxNumber.end()); ll ans = 1; for (int i = 0; i < n; i++) { if (maxNumber[i] <= i) return 0; (ans *= maxNumber[i]-i) %= MOD; } return (int)ans; } };