Submission #353685

# Submission time Handle Problem Language Result Execution time Memory
353685 2021-01-21T09:28:16 Z shivensinha4 Tents (JOI18_tents) C++17
100 / 100
274 ms 71020 KB
#include "bits/stdc++.h"
using namespace std;
#define for_(i, s, e) for (int i = s; i < (int) e; i++)
#define for__(i, s, e) for (ll i = s; i < e; i++)
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> ii;
#define endl '\n'

const ll mod = 1e9+7;

ll ncr(ll n, ll r) {
	if (r == 0) return 1;
	if (r == 1) return n;
	if (r == 2) return ((n*(n-1))/2 % mod);
	assert(false);
}

int main() {
#ifdef mlocal
	freopen("test.in", "r", stdin);
#endif
	
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	int n, m; cin >> n >> m;
	vector<vector<ll>> dp(n+1, vector<ll>(m+1));
	
	for_(i, 0, m+1) dp[n][i] = 1;
	for (int i = n-1;  i >= 0; i--) {
		for_(emp, 0, m+1) {
			dp[i][emp] = dp[i+1][emp];
			if (emp >= 2) {
				dp[i][emp] += ((dp[i+1][emp-2] * ncr(emp, 2)) % mod);
				if (dp[i][emp] >= mod) dp[i][emp] -= mod;
			}
			
			if (emp >= 1) {
				if (i < n-1) dp[i][emp] += (emp * (n-i-1) * dp[i+2][emp-1]) % mod;
				if (dp[i][emp] >= mod) dp[i][emp] -= mod;
				dp[i][emp] += (((dp[i+1][emp-1] * 4) % mod) * emp) % mod;
				if (dp[i][emp] >= mod) dp[i][emp] -= mod;
			}
		}
	}
	
	cout << (dp[0][m]-1+mod) % mod << endl;
	
	
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 2 ms 492 KB Output is correct
6 Correct 1 ms 492 KB Output is correct
7 Correct 1 ms 492 KB Output is correct
8 Correct 1 ms 492 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 3 ms 1004 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 2 ms 492 KB Output is correct
6 Correct 1 ms 492 KB Output is correct
7 Correct 1 ms 492 KB Output is correct
8 Correct 1 ms 492 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 2 ms 620 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 3 ms 1004 KB Output is correct
13 Correct 1 ms 364 KB Output is correct
14 Correct 1 ms 492 KB Output is correct
15 Correct 176 ms 44292 KB Output is correct
16 Correct 11 ms 3180 KB Output is correct
17 Correct 36 ms 10092 KB Output is correct
18 Correct 54 ms 12524 KB Output is correct
19 Correct 192 ms 51436 KB Output is correct
20 Correct 147 ms 41196 KB Output is correct
21 Correct 98 ms 27372 KB Output is correct
22 Correct 115 ms 26988 KB Output is correct
23 Correct 62 ms 15084 KB Output is correct
24 Correct 262 ms 71020 KB Output is correct
25 Correct 202 ms 52756 KB Output is correct
26 Correct 224 ms 60396 KB Output is correct
27 Correct 274 ms 68204 KB Output is correct