把所有的int换成ull以后变成了30分,如下:
```cpp
#include <iostream>
#include <cstdio>
using namespace std;
#define MOD 10007
#define ull unsigned long long
ull c(ull n,ull m)
{
ull ans=1;
m=min(m,n-m);
for(ull i=0;i<m;++i)
ans=(ans*(n-i)/(i+1))%MOD;
return ans;
}
int main()
{
ull ans = 1,n,m;
scanf("%llu%llu",&n,&m);
for(ull i=1;i<=m;++i)
{
ull x;
scanf("%llu",&x);
ans=(ans*c(n,x))%MOD;
n-=x;
}
printf("%llu\n",ans);
return 0;
}
by WanderingTrader @ 2020-07-16 12:06:45
我先有个疑惑,为什么你的min可以用long long、、
by fresh_boy @ 2020-07-16 12:11:23
你的c函数有问题,,整数除了之后不是应该保留整数?,然后模了之后的话,(实际是小数)这样的c会产生偏差
by fresh_boy @ 2020-07-16 12:14:22
好像是这样的?~~口胡~~
by fresh_boy @ 2020-07-16 12:15:06
@[唱歌的向日葵](/user/225100) 你这样的c肯定是几个整数相乘,但貌似实际上是几个小数相乘
by fresh_boy @ 2020-07-16 12:15:56
@[唱歌的向日葵](/user/225100) min咋不能用ll。。。
by chenxia25 @ 2020-07-16 12:24:11
@[唱歌的向日葵](/user/225100) min的要求是两个数类型相同
by WanderingTrader @ 2020-07-16 12:33:17
@[唱歌的向日葵](/user/225100) 为什么会有问题呢?边乘边除是可以整除的啊
by WanderingTrader @ 2020-07-16 12:35:29
@[zycany](/user/270791) 对于 `/` 没有同余定理
by Implicit @ 2020-07-16 12:46:52
@[zycany](/user/270791) 为什么我用min取两个longlong报错..
by fresh_boy @ 2020-07-16 16:25:32