1 条题解
-
0
自动搬运
来自洛谷,原作者为

刘心远
封神伯纳乌搬运于
2025-08-24 21:31:14,当前版本为作者最后更新于2017-06-02 19:49:08,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
爆简单数学题!
【算法分析】设n=10,10个数分别为12,11,64,65,68,34,36,54,39,48
则先把这10个数升序排列=>11,12,34,36,39,48,54,64,65,68
第一个号码有11种选择,1~11 第二个号码有12-1=11(种)选择(去掉1种)
第三个号码有34-2=32(种)选择(去掉2种)
第四个号码有36-3=33(种)选择(去掉3种)
第五个号码有39-4=35(种)选择(去掉4种)
第六个号码有48-5=43(种)选择(去掉5种)
第七个号码有54-6=48(种)选择(去掉6种)
第八个号码有64-7=57(种)选择(去掉7种)
第九个号码有65-8=57(种)选择(去掉8种)
第十个号码有68-9=59(种)选择(去掉9种)
所以答案为11*11*32*33*35*43*48*57*57*59%1000000007
【温馨提示】1.必须排序,否则前一个选择的号码不知道是否在现在的范围中
2.必须边乘边模,否则long long要爆掉的
【华丽标程】
#include<iostream> #include<algorithm> using namespace std; int main() { int n,i,maxnumber[51]; long long ans=1; cin>>n; for(i=1;i<=n;i++)cin>>maxnumber[i]; sort(maxnumber+1,maxnumber+n+1); //排序,默认升序 for(i=1;i<=n;i++){ans*=(maxnumber[i]-i+1); ans%=1000000007;} //第i个号码的种数是maxnumber[i]-i+1 cout<<ans<<endl; return 0; } 请关注http://blog.sina.com.cn/s/blog_1754bd7130102wxk7.html
- 1
信息
- ID
- 835
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者