【题目来源】https://blog.csdn.net/hnjzsyjyj/article/details/162212476【题目描述】太郎有 N 只兔子现在为了方便识别它们太郎要给他们编号。兔子们向太郎表达了它们对号码的喜好每个兔子 i 想要一个整数介于 1 和 Mi 之间可以为 1 或 Mi。当然每个兔子的编号是不同的。现在太郎想知道一共有多少种编号的方法。你只用输出答案对10^97取余的结果即可。如果这是不可能的就输出 0。【输入格式】第一行是一个整数 N。第二行 N 个整数 Mi。​​​​​​​【输出格式】一个整数表示方案总数。​​​​​​​【输入样例】25 8【输出样例】35【数据范围】对于全部数据1≤N≤501≤Mi≤1000。【算法分析】设已将所有兔子的编号上限升序排序。分配到第 i 只兔子时前 i-1 只兔子已经占用了 i-1 个互不重复的数字而该兔子仅能选取 1~v[i] 内的数因此合法可选编号的数量为 v[i]-(i-1)记作 cnt v[i] - (i-1)。【算法代码】#include bits/stdc.h using namespace std; typedef long long LL; const int MOD1e97; const int N55; int v[N]; int main() { int n; cinn; for(int i1; in; i) { cinv[i]; } sort(v1,v1n); LL ans1; for(int i1; in; i) { int cntv[i]-(i-1); if(cnt0) { ans0; break; } ansans*cnt%MOD; } coutansendl; return 0; } /* in: 2 5 8 out: 35 */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/162212476