QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#636929 | #9451. Expected Waiting Time | ucup-team2000# | TL | 1ms | 11996kb | C++23 | 1.7kb | 2024-10-13 04:08:55 | 2024-10-13 04:08:56 |
Judging History
answer
#include <bits/stdc++.h>
int N, P, S, A, B;
long long a[1100000], b[1100000];
long long fpow(long long a, long long b, long long p) {
long long s = 1;
for (; b; b >>= 1, a = a * a % p)
if (b & 1) s = s * a % p;
return s;
}
long long fac[2100000], inv[2100000];
long long catalan(int n) { return fac[2 * n] * inv[n] % P * inv[n + 1] % P; }
int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%d%d%d%d%d", &N, &P, &S, &A, &B);
fac[0] = inv[0] = 1;
for (int i = 1; i <= 2 * N; ++i) fac[i] = fac[i - 1] * i % P;
for (int i = 1; i <= 2 * N; ++i) inv[i] = fpow(fac[i], P - 2, P);
a[0] = 0;
b[0] = S;
for (int i = 1; i <= 2 * N; ++i) {
b[i] = (1ll * A * b[i - 1] + B) % P;
a[i] = a[i - 1] + b[i] + 1;
// printf("%d %lld\n", i, a[i]);
}
static long long cnt[2100000];
cnt[1] = catalan(N);
for (int i = 2; i <= N; ++i) {
if (!(i & 1)) {
cnt[i] = (cnt[i - 1] - catalan(N - i / 2) * catalan(i / 2 - 1) + P) % P;
} else {
cnt[i] = cnt[i - 1];
}
}
if (N % 2 == 0) {
cnt[N] = cnt[1] * fpow(2, P - 2, P) % P;
}
for (int i = N + 1; i <= 2 * N; ++i) {
cnt[i] = (cnt[1] - cnt[2 * N + 1 - i] + P) % P;
}
// for (int i = 1; i <= 2 * N; ++i) {
// printf("%lld\n", cnt[i]);
// }
long long ans = 0;
for (int i = 1; i <= 2 * N; ++i) {
ans = (P + ans - cnt[i] * a[i] % P) % P;
ans = (ans + (P + cnt[1] - cnt[i]) % P * a[i] % P) % P;
}
printf("%lld\n", ans * fpow(cnt[1], P - 2, P) % P);
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 11996kb
input:
5 1 1000000007 0 1 0 2 1000000007 0 1 1 2 7 5 2 3 3 31 15 6 24 20 1000000007 0 1 0
output:
1 12 1 21 879705565
result:
ok 5 number(s): "1 12 1 21 879705565"
Test #2:
score: -100
Time Limit Exceeded
input:
4400 3954 1000000007 0 1 0 1306 1000000007 0 1 0 3774 1000000007 0 1 0 3345 1000000007 0 1 0 891 1000000007 0 1 0 2462 1000000007 0 1 0 237 1000000007 0 1 0 26 1000000007 0 1 0 2510 1000000007 0 1 0 637 1000000007 0 1 0 3250 1000000007 0 1 0 3447 1000000007 0 1 0 1222 1000000007 0 1 0 133 1000000007...
output:
440618338 378292891 979368645 915766295 343598158 80867595 161627927 517387931 396936703 42785642 945720545 764273281 186237656 635777911 164064906 548455037 991964184 468137124 561243246 118562285 856945294 642467240 23673926 808943705 897417615 462422554 656411244 204288121 997894281 244685651 762...