답안 #125567

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
125567 2019-07-06T00:29:48 Z tutis 캥거루 (CEOI16_kangaroo) C++17
51 / 100
2000 ms 322920 KB
/*input
10 2 3
*/
#pragma GCC optimize ("O3")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const ll modulo = 1000000007;
int sgn(ll x)
{
	if (x < 0)
		return -1;
	if (x > 0)
		return 1;
	return 0;
}
map<tuple<int, int, int, int>, ll>M;
ll f(int n, int a, int b, int s)
{
	if (a == b)
		return 0;
	if (M.count(make_tuple(n, a, b, s)))
		return M[make_tuple(n, a, b, s)];
	if (n == 2)
	{
		if (sgn(b - a) != s)
			return 0;
		else
			return 1;
	}
	ll ret = 0;
	for (int c = 1; c <= n; c++)
	{
		if (sgn(b - c) == s)
		{
			ret += f(n - 1, a - (a > b), c - (c > b), -s);
		}
	}
	ret %= modulo;
	return M[make_tuple(n, a, b, s)] = ret;
}
ll f(int n, int a, int b)
{
	ll ans = f(n, a, b, 1) + f(n, a, b, -1);
	ans %= modulo;
	return ans;
}
ll fast(int N, int A, int B)
{
	ll L[N + 1][N + 1][N + 1];
	ll R[N + 1][N + 1][N + 1];
	for (int n = 2; n <= N; n++)
	{
		for (int a = 1; a <= n; a++)
		{
			for (int b = 1; b <= n; b++)
			{
				L[n][a][b] = 0;
				R[n][a][b] = 0;
				if (a == b)
					continue;
				if (n == 2)
				{
					if (a > b)
					{
						L[n][a][b] = 1;
					}
					if (a < b)
					{
						R[n][a][b] = 1;
					}
				}
				else
				{
					for (int c = 1; c <= n; c++)
					{
						if (c > b)
						{
							L[n][a][b] += R[n - 1][a - (a > b)][c - (c > b)];
						}
						if (c < b)
						{
							R[n][a][b] += L[n - 1][a - (a > b)][c - (c > b)];
						}
					}
				}
				L[n][a][b] %= modulo;
				R[n][a][b] %= modulo;
			}
		}
	}
	ll ret = L[N][A][B] + R[N][A][B];
	ret %= modulo;
	return ret;
}
int main()
{
	int n, a, b;
	cin >> n >> a >> b;
	//cout << f(n, a, b) << "\n";
	cout << fast(n, a, b) << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 4 ms 1144 KB Output is correct
5 Correct 4 ms 1144 KB Output is correct
6 Correct 4 ms 1144 KB Output is correct
7 Correct 3 ms 1016 KB Output is correct
8 Correct 4 ms 1016 KB Output is correct
9 Correct 4 ms 1144 KB Output is correct
10 Correct 4 ms 1144 KB Output is correct
11 Correct 4 ms 1016 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 4 ms 1144 KB Output is correct
5 Correct 4 ms 1144 KB Output is correct
6 Correct 4 ms 1144 KB Output is correct
7 Correct 3 ms 1016 KB Output is correct
8 Correct 4 ms 1016 KB Output is correct
9 Correct 4 ms 1144 KB Output is correct
10 Correct 4 ms 1144 KB Output is correct
11 Correct 4 ms 1016 KB Output is correct
12 Correct 772 ms 63992 KB Output is correct
13 Correct 609 ms 53324 KB Output is correct
14 Correct 777 ms 63984 KB Output is correct
15 Correct 789 ms 65056 KB Output is correct
16 Correct 772 ms 64120 KB Output is correct
17 Correct 790 ms 65088 KB Output is correct
18 Correct 503 ms 46200 KB Output is correct
19 Correct 743 ms 62200 KB Output is correct
20 Correct 796 ms 65060 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 4 ms 1144 KB Output is correct
5 Correct 4 ms 1144 KB Output is correct
6 Correct 4 ms 1144 KB Output is correct
7 Correct 3 ms 1016 KB Output is correct
8 Correct 4 ms 1016 KB Output is correct
9 Correct 4 ms 1144 KB Output is correct
10 Correct 4 ms 1144 KB Output is correct
11 Correct 4 ms 1016 KB Output is correct
12 Correct 772 ms 63992 KB Output is correct
13 Correct 609 ms 53324 KB Output is correct
14 Correct 777 ms 63984 KB Output is correct
15 Correct 789 ms 65056 KB Output is correct
16 Correct 772 ms 64120 KB Output is correct
17 Correct 790 ms 65088 KB Output is correct
18 Correct 503 ms 46200 KB Output is correct
19 Correct 743 ms 62200 KB Output is correct
20 Correct 796 ms 65060 KB Output is correct
21 Execution timed out 2086 ms 322920 KB Time limit exceeded
22 Halted 0 ms 0 KB -