QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#306912 | #8015. 鸡 | zhoukangyang | 100 ✓ | 104ms | 5768kb | C++14 | 2.5kb | 2024-01-17 16:09:41 | 2024-01-17 16:09:41 |
Judging History
answer
#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector < int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long
#define ld __float128
#define pb emplace_back
using namespace std;
const int N = 1e6 + 7;
int n, m, mod;
int qpow(int x, int y = mod - 2) {
int res = 1;
for(; y; x = (ll) x * x % mod, y >>= 1) if(y & 1) res = (ll) res * x % mod;
return res;
}
int fac[N], ifac[N], inv[N];
void init(int x) {
fac[0] = ifac[0] = inv[1] = 1;
L(i, 2, x) inv[i] = (ll) (mod - mod / i) * inv[mod % i] % mod;
L(i, 1, x) fac[i] = (ll) fac[i - 1] * i % mod, ifac[i] = (ll) ifac[i - 1] * inv[i] % mod;
}
int C(int x, int y) {
return x < y || y < 0 ? 0 : (ll) fac[x] * ifac[y] % mod * ifac[x - y] % mod;
}
inline int sgn(int x) {
return (x & 1) ? mod - 1 : 1;
}
int fan[N];
int ff[N];
int dp[N];
int rat[N];
int main() {
ios :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m >> mod;
// n = 4, m = 2, mod = 998244353;
dp[0] = 1;
int ans = 0;
L(i, 1, n) {
dp[i] = dp[i - 1], (dp[i] += (ll)dp[max(i - 2, 0)] * m % mod) %= mod;
}
(ans += dp[n]) %= mod;
int all_case = 0;
L(i, 2, n - 1)
(all_case += (ll)dp[i - 2] * dp[n - i - 1] % mod) %= mod;
(all_case += (ll)2 * dp[n - 2] % mod) %= mod;
L(i, 1, m)
(ans += (ll)all_case * (m - i) % mod) %= mod;
L(i, 0, n)
rat[i] = dp[max(i - 1, 0)];
L(i, 0, n)
L(j, 0, n - i)
(fan[i + j] += (ll)rat[i] * rat[j] % mod) %= mod;
L(i, 0, n)
L(j, 0, n - i)
(ff[i + j] += (ll)dp[i] * dp[j] % mod) %= mod;
L(i, 1, m) {
int bad = 0;
L(ls, 1, n) {
int len = ls * 2 - 1;
if(len == n) {
(bad += 1) %= mod;
} else {
int qls = len + 4;
if(qls <= n)
(bad += (ll) fan[n - qls] * (m - i) % mod * (m - i) % mod) %= mod;
if(len + 2 <= n) {
(bad += (ll) rat[n - (len + 2)] * (m - i) * 2 % mod) %= mod;
}
}
}
// cout << i << " : bad = " << bad << ", all_case = " << all_case << endl;
(ans += mod - (ll)bad * (m - i) % mod) %= mod;
}
int cnt = 1;
L(s, 4, n)
(cnt += (ll)sgn(s) * ff[n - s] % mod) %= mod;
// cout << "cnt = " << cnt << endl;
for(int len = 3; len < n; len += 2)
(cnt += (ll)rat[n - len - 1] * m % mod * 2 % mod) %= mod;
(ans += (ll)cnt * m % mod) %= mod;
cout << ans << '\n';
return 0;
}
詳細信息
Test #1:
score: 5
Accepted
time: 1ms
memory: 5700kb
input:
5 5 1004326439
output:
1281
result:
ok 1 number(s): "1281"
Test #2:
score: 5
Accepted
time: 1ms
memory: 5688kb
input:
5 4 1002682123
output:
649
result:
ok 1 number(s): "649"
Test #3:
score: 5
Accepted
time: 1ms
memory: 5680kb
input:
287 1 1003060133
output:
328406329
result:
ok 1 number(s): "328406329"
Test #4:
score: 5
Accepted
time: 1ms
memory: 5620kb
input:
279 1 1004432189
output:
222258837
result:
ok 1 number(s): "222258837"
Test #5:
score: 5
Accepted
time: 1ms
memory: 5636kb
input:
300 1 1005912203
output:
707086810
result:
ok 1 number(s): "707086810"
Test #6:
score: 5
Accepted
time: 1ms
memory: 5568kb
input:
288 5 1003307827
output:
964512417
result:
ok 1 number(s): "964512417"
Test #7:
score: 5
Accepted
time: 1ms
memory: 5640kb
input:
281 5 1008854383
output:
755282155
result:
ok 1 number(s): "755282155"
Test #8:
score: 5
Accepted
time: 1ms
memory: 5708kb
input:
270 5 1007619367
output:
431828317
result:
ok 1 number(s): "431828317"
Test #9:
score: 5
Accepted
time: 0ms
memory: 5676kb
input:
292 5 1002449813
output:
183613546
result:
ok 1 number(s): "183613546"
Test #10:
score: 5
Accepted
time: 1ms
memory: 5768kb
input:
300 5 1005897091
output:
915308166
result:
ok 1 number(s): "915308166"
Test #11:
score: 5
Accepted
time: 0ms
memory: 5632kb
input:
45 50 1009100993
output:
940158800
result:
ok 1 number(s): "940158800"
Test #12:
score: 5
Accepted
time: 1ms
memory: 5708kb
input:
49 50 1001428049
output:
1045902
result:
ok 1 number(s): "1045902"
Test #13:
score: 5
Accepted
time: 1ms
memory: 5692kb
input:
49 50 1007851073
output:
922264698
result:
ok 1 number(s): "922264698"
Test #14:
score: 5
Accepted
time: 1ms
memory: 5616kb
input:
50 50 1005625571
output:
442192770
result:
ok 1 number(s): "442192770"
Test #15:
score: 5
Accepted
time: 0ms
memory: 5616kb
input:
290 300 1005068699
output:
484359497
result:
ok 1 number(s): "484359497"
Test #16:
score: 5
Accepted
time: 2ms
memory: 5688kb
input:
270 300 1003440637
output:
899894137
result:
ok 1 number(s): "899894137"
Test #17:
score: 5
Accepted
time: 2ms
memory: 5688kb
input:
300 300 1008561979
output:
33407754
result:
ok 1 number(s): "33407754"
Test #18:
score: 5
Accepted
time: 102ms
memory: 5728kb
input:
2991 3000 1004658859
output:
167444547
result:
ok 1 number(s): "167444547"
Test #19:
score: 5
Accepted
time: 98ms
memory: 5716kb
input:
2870 3000 1004054173
output:
860666062
result:
ok 1 number(s): "860666062"
Test #20:
score: 5
Accepted
time: 104ms
memory: 5740kb
input:
3000 3000 1009539589
output:
696222334
result:
ok 1 number(s): "696222334"