問題を解決するにLuogu P1358 [ポーカー]

トピックリンク:Luogu P1358

\(N \)選挙の内側のカード\(a_iを\)

つまり、それは行われていました

ans += C(n, a[i]), n -= a[i];

この操作

モジュロに並んで

\(コード:\)

#include <bits/stdc++.h>

const int Mod = 10007;
const int MaxM = 100000 + 10;
using namespace std;

inline int read() {
    int cnt = 0, opt = 1;
    char ch = getchar();

    for (; ! isalnum(ch); ch = getchar())
        if (ch == '-')  opt = 0;
    for (; isalnum(ch); ch = getchar())
        cnt = cnt * 10 + ch - 48;

    return opt ? cnt : -cnt;
}//快读优化

int n, m, tot = 1;
int a[MaxM];

int C(int x, int y) {//计算C(n,a[i])
    int sum = 1;
    for (int i = y - x + 1; i <= y; ++ i) sum = sum * i % Mod;
    
    for (int i = 1; i <= x; ++ i) {
        while (sum % i != 0)
            sum += Mod;
        sum = sum / i % Mod;
    }
    return sum;
}
int main() {
    n = read(), m = read();
    for(int i = 1; i <= m; ++ i) {
        a[i] = read();
        tot = tot * C(a[i], n) % Mod;
        n -= a[i];//反复进行此操作
    }
    cout << tot % Mod;
    return 0;
}

おすすめ

転載: www.cnblogs.com/chz-hc/p/12221214.html