从零开始的数数大学习
2026-03-22 21:44:14
发布于:广东
我真零基础啊
P6146
Difficulty:3.2 / Easy
这题我怎么都做这么吃力啊。
拆成上半部分和下半部分。
注意到上半部分所有放 个的情况等价。所以考虑枚举 。
上半部分的情况数是 ,下半部分情况数是 ,乘起来即可。
namespace cjdst{
const ll N = 2000, mod = 100003;
ll frac[N + 5], invfrac[N + 5];
ll ksm(ll x, ll y){
ll ans = 1;
while(y){
if(y & 1) ans = ans * x % mod;
x = x * x % mod, y >>= 1;
}
return ans;
}
void init(){
std::ios::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
frac[0] = 1;
for(int i = 1; i <= N; i++){
frac[i] = frac[i - 1] * i % mod;
}
invfrac[N] = ksm(frac[N], mod - 2);
for(int i = N - 1; i >= 0; i--){
invfrac[i] = invfrac[i + 1] * (i + 1) % mod;
}
}
ll A(ll n, ll m){
if(m > n) return 0;
return frac[n] * invfrac[n - m] % mod;
}
ll C(ll n, ll m){
if(m > n) return 0;
return frac[n] * invfrac[m] % mod * invfrac[n - m] % mod;
}
void solve(){
int a, b, c, d, k;
std::cin >> a >> b >> c >> d >> k;
ll ans = 0;
for(int i = 0; i <= k; i++){
ans += A(a, i) * C(b, i) % mod * A(a + c - i, k - i) % mod * C(d, k - i) % mod;
ans %= mod;
}
std::cout << ans << '\n';
}
}
时间复杂度:。
全部评论 1
ddd
8小时前 来自 广东
0我要是艾特你会咋样🤔🤔🤔
8小时前 来自 广东
0艾特你,我应该不会死吧
8小时前 来自 广东
0


























有帮助,赞一个