QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#141655 | #1064. 移动金币 | NOI_AK_ME | 100 ✓ | 0ms | 1896kb | C++98 | 1.6kb | 2023-08-17 19:40:08 | 2023-08-17 19:40:12 |
Judging History
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'