3 条题解
-
-2
对于第i只兔子,取得编号的方法为Mi种 那么,总方法数为:M1 * M2 * ...* Mi 但要排除任意两只编号相同的可能 (这怎么算?)
仔细想想,如果能保证M1<=M2<=M3...<=Mi 那么答案就是 M1*(M2-1)(M3-2)(Mi-i+1) (若i从0开始,通项为mi-i)
当任何一项为0时,表示没有可选择编号了,退出
注意题目只要叫你取余,不要刚,上long long。 这题不上long long WA7,可见出题人
的恶意多么热切希望你掌握long long#include <bits/stdc++.h> using namespace std; int main(){ int n, m[50], itm, MOD=1e9+7; //对1e9取模后再和Mi(1-1000)相乘,理论上最大为1e12,可能爆int(约2e9) long long sum =1; cin>>n; for(int i=0;i<n;i++) cin>>m[i]; sort(m,m+n);//免费好用的快排,不用白不用 for (int i=0;i<n;i++){ itm = m[i]-i; if (itm<=0) {sum=0;break;} sum = sum*itm % MOD; } cout<<sum; return 0; }
- 1
信息
- ID
- 831
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 17
- 已通过
- 8
- 上传者