QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#141655#1064. 移动金币NOI_AK_ME100 ✓0ms1896kbC++981.6kb2023-08-17 19:40:082023-08-17 19:40:12

Judging History

This is the latest submission verdict.

  • [2023-08-17 19:40:12]
  • Judged
  • Verdict: 100
  • Time: 0ms
  • Memory: 1896kb
  • [2023-08-17 19:40:08]
  • Submitted

answer

#pragma GCC optimize("Ofast, unroll-loops, inline")
#include <cstdio>
#define ll long long
#define mo 1000000009

using namespace std;

int n, m;
ll jc[61], inv[61], p[61], f[21][61];
inline ll C(int n, int m) {
    if (n < m)
        return 0;

    if (m < 0)
        return 0;

    return jc[n] * inv[m] % mo * inv[n - m] % mo;
}

ll ksm(ll x, ll y) {
    ll re = 1;

    while (y) {
        if (y & 1)
            re = re * x % mo;

        x = x * x % mo;
        y >>= 1;
    }

    return re;
}


int main() {
    scanf("%d %d", &n, &m);
	jc[0] = 1;

    for (int i = 1; i <= m + 1; i++)
        jc[i] = jc[i - 1] * i % mo;

    inv[m + 1] = ksm(jc[m + 1], mo - 2);

    for (int i = m; i >= 0; i--)
        inv[i] = inv[i + 1] * (i + 1) % mo;

    int on = (m + 1) / 2, jn = (m + 2) / 2;

    for (int k = 0; k <= m + 1; k++) {
        for (int i = 0; i <= on; i += 2) {
            p[k] = (p[k] + C(on, i) * C(jn, k - i) % mo) % mo;
        }
    }
    f[20][0] = 1;
    int need = n - m;

    for (int i = 19; i >= 0; i--) {
        int hv = (need >> i) & 1;

        for (int j = 0; j <= m + 1; j++)
            for (int k = 0; k <= m + 1; k++) {
                int to = 2 * j + hv - k;

                if (to < 0 || to > m + 1)
                    continue;

                f[i][to] = (f[i][to] + f[i + 1][j] * p[k] % mo) % mo;
            }
    }

    ll ans = 1;

    for (int i = n - m + 1; i <= n; i++)
        ans = ans * i % mo;

    ans = ans * inv[m];
    printf("%lld", (ans - f[0][0] + mo) % mo);
    return 0;
}

詳細信息

Subtask #1:

score: 50
Accepted

Test #1:

score: 50
Accepted
time: 0ms
memory: 1488kb

input:

242 49

output:

328585486

result:

ok single line: '328585486'

Test #2:

score: 0
Accepted
time: 0ms
memory: 1704kb

input:

242 47

output:

219114925

result:

ok single line: '219114925'

Test #3:

score: 0
Accepted
time: 0ms
memory: 1772kb

input:

243 50

output:

45372101

result:

ok single line: '45372101'

Test #4:

score: 0
Accepted
time: 0ms
memory: 1756kb

input:

243 47

output:

650410655

result:

ok single line: '650410655'

Test #5:

score: 0
Accepted
time: 0ms
memory: 1764kb

input:

244 47

output:

179262409

result:

ok single line: '179262409'

Test #6:

score: 0
Accepted
time: 0ms
memory: 1480kb

input:

245 50

output:

238336251

result:

ok single line: '238336251'

Test #7:

score: 0
Accepted
time: 0ms
memory: 1592kb

input:

245 48

output:

596598396

result:

ok single line: '596598396'

Test #8:

score: 0
Accepted
time: 0ms
memory: 1764kb

input:

246 46

output:

989539157

result:

ok single line: '989539157'

Test #9:

score: 0
Accepted
time: 0ms
memory: 1764kb

input:

246 46

output:

989539157

result:

ok single line: '989539157'

Test #10:

score: 0
Accepted
time: 0ms
memory: 1612kb

input:

240 50

output:

876085357

result:

ok single line: '876085357'

Subtask #2:

score: 50
Accepted

Dependency #1:

100%
Accepted

Test #11:

score: 50
Accepted
time: 0ms
memory: 1724kb

input:

142791 49

output:

83586215

result:

ok single line: '83586215'

Test #12:

score: 0
Accepted
time: 0ms
memory: 1640kb

input:

145417 47

output:

461460544

result:

ok single line: '461460544'

Test #13:

score: 0
Accepted
time: 0ms
memory: 1700kb

input:

148042 50

output:

990066474

result:

ok single line: '990066474'

Test #14:

score: 0
Accepted
time: 0ms
memory: 1756kb

input:

135668 50

output:

849717347

result:

ok single line: '849717347'

Test #15:

score: 0
Accepted
time: 0ms
memory: 1772kb

input:

138293 48

output:

605810507

result:

ok single line: '605810507'

Test #16:

score: 0
Accepted
time: 0ms
memory: 1896kb

input:

140919 46

output:

842694042

result:

ok single line: '842694042'

Test #17:

score: 0
Accepted
time: 0ms
memory: 1644kb

input:

143544 49

output:

806787086

result:

ok single line: '806787086'

Test #18:

score: 0
Accepted
time: 0ms
memory: 1764kb

input:

146170 49

output:

792539725

result:

ok single line: '792539725'

Test #19:

score: 0
Accepted
time: 0ms
memory: 1644kb

input:

148795 47

output:

445621354

result:

ok single line: '445621354'

Test #20:

score: 0
Accepted
time: 0ms
memory: 1768kb

input:

137925 48

output:

562018157

result:

ok single line: '562018157'