QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#306912#8015. 鸡zhoukangyang100 ✓104ms5768kbC++142.5kb2024-01-17 16:09:412024-01-17 16:09:41

Judging History

你现在查看的是最新测评结果

  • [2024-01-17 16:09:41]
  • 评测
  • 测评结果:100
  • 用时:104ms
  • 内存:5768kb
  • [2024-01-17 16:09:41]
  • 提交

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"