UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#207924#3711. Heavenly Altitudesmengxiangjia10083ms5208kbC++111.5kb2024-08-01 09:55:442024-08-01 12:39:23

answer

// @author : jellyfish
// @file : 3711.cpp
// Fuck CCF,CCF wants my money.
#include <bits/stdc++.h>
using namespace std;
#define rd() ({int x(0);bool f(0);char ch(getchar());while(ch<'0'||ch>'9')f^=ch=='-',ch=getchar();while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();f?-x:x; })
#define mod 1000000007
typedef long long ll;
int n, m;
vector<int> a;
int fac[1000005];
void init()
{
    fac[0] = fac[1] = 1;
    for (int i = 2; i <= 1000000; ++i)
        fac[i] = (1ll * fac[i - 1] * i) % mod;
}
int env(ll base)
{
    ll ans = 1;
    int b = mod - 2;
    while (b)
    {
        if (b & 1)
            ans = ans * base % mod;
        base = base * base % mod;
        b >>= 1;
    }
    return ans;
}
int C(int a, int b)
{
    return 1ll * fac[a] * env(fac[b]) % mod * env(fac[a - b]) % mod;
}
int main()
{
    ll ans = 1;
    init();
    // cerr << "init finish" << endl;
    n = rd(), m = rd();
    a.resize(m + 1);
    for (int i = m; i >= 1; --i)
        a[i] = rd();
    // sort(a.begin() + 1, a.end(), [](int a, int b) -> int
    //  { return a > b; });
    // cerr << "sort finish" << endl;

    for (int i = 1; i <= m; ++i)
    {
        // cerr << "start turn " << i << endl;
        // cerr << "a: " << n - a[i] - (n / m) * (i - 1) << " b: " << n / m - 1 << endl;
        ans *= C(n - a[i] - (n / m) * (i - 1), n / m - 1);
        ans %= mod;
        // cerr << "turn " << i << " finish" << endl;
    }
    printf("%d\n", ans);
    return 0;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 0ms
memory: 5092kb

input:

9 3
1 3 4

output:

30

result:

ok 1 number(s): "30"

Test #2:

score: 10
Accepted
time: 8ms
memory: 5092kb

input:

10 5
1 2 3 4 6

output:

96

result:

ok 1 number(s): "96"

Test #3:

score: 10
Accepted
time: 8ms
memory: 5096kb

input:

1000 125
1 2 4 6 7 8 10 12 13 16 19 24 25 26 28 29 30 31 39 40 41 46 49 52 55 64 65 67 68 77 78 81 8...

output:

131515409

result:

ok 1 number(s): "131515409"

Test #4:

score: 10
Accepted
time: 8ms
memory: 5092kb

input:

999 111
1 2 6 7 10 12 13 15 19 26 29 32 33 52 53 54 57 58 59 60 69 73 78 87 91 101 103 105 106 110 1...

output:

172899290

result:

ok 1 number(s): "172899290"

Test #5:

score: 10
Accepted
time: 5ms
memory: 5096kb

input:

100000 1250
1 4 13 19 26 33 46 53 68 72 78 100 104 115 116 126 129 131 142 150 156 157 160 167 197 2...

output:

821794520

result:

ok 1 number(s): "821794520"

Test #6:

score: 10
Accepted
time: 12ms
memory: 5136kb

input:

99999 11111
1 2 4 5 9 10 11 12 13 14 15 16 17 19 20 21 22 23 25 27 29 31 32 33 34 35 36 39 41 42 43 ...

output:

941657016

result:

ok 1 number(s): "941657016"

Test #7:

score: 10
Accepted
time: 7ms
memory: 5096kb

input:

1000000 1000
1 200 304 310 404 584 622 831 1056 1160 1948 1984 2027 2137 2216 2434 2452 2488 2667 27...

output:

109815619

result:

ok 1 number(s): "109815619"

Test #8:

score: 10
Accepted
time: 8ms
memory: 5128kb

input:

1000000 10000
1 6 8 13 15 28 44 51 56 72 73 83 97 99 105 113 126 130 136 177 183 184 213 218 265 288...

output:

780311646

result:

ok 1 number(s): "780311646"

Test #9:

score: 10
Accepted
time: 8ms
memory: 5092kb

input:

1000000 100
1 742 1563 4179 8008 8716 11385 16121 16656 17170 18699 24004 29401 31368 35296 35580 45...

output:

338576884

result:

ok 1 number(s): "338576884"

Test #10:

score: 10
Accepted
time: 19ms
memory: 5208kb

input:

900000 30000
1 3 6 7 9 10 18 22 24 29 30 32 33 34 39 44 46 54 55 62 63 64 75 78 84 90 93 95 96 99 10...

output:

507088503

result:

ok 1 number(s): "507088503"