60求调
查看原帖
60求调
798543
qyzqwq楼主2023/11/23 20:21
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
int dx[9] = { 0,1,2,2,1,-1,-2,-2,-1 };
int dy[9] = { 0,2,1,-1,-2,-2,-1,1,2 };
long long cnt[22][22] = { 0 };
using namespace std;
int main()
{
	int n, m;
	cin >> n >> m;
	int mx, my;
	cin >> mx >> my;
	int num1 = 1, num2 = 1;
	for (int i = 0; i <= n; i++) {
		for (int k = 0; k < 9; k++) {
			if (my + dy[k] == i && mx + dx[k] == 0) {
				num1 = 0;
			}
		}
		cnt[i][0] = num1;
	}
	for (int i = 0; i <= m; i++) {
		for (int k = 0; k < 9; k++) {
			if (mx + dx[k] == i && my + dy[k] == 0) {
				num2 = 0;
			}
		}
		cnt[0][i] = num2;
	}
	if (n == 0) {
		for (int i = 0; i <= 0; i++)
			for (int j = 1; j <= m; j++) {
				cnt[i][j] = cnt[i - 1][j] + cnt[i][j - 1];
				for (int k = 0; k < 9; k++)
					if (i == mx + dx[k] && j == my + dy[k]) cnt[i][j] = 0;
			}
		cout << cnt[n][m];
		return 0;
	}
	if (m == 0) {
		for (int i = 1; i <= n; i++)
			for (int j = 0; j <= 0; j++) {
				cnt[i][j] = cnt[i - 1][j] + cnt[i][j - 1];
				for (int k = 0; k < 9; k++)
					if (i == mx + dx[k] && j == my + dy[k]) cnt[i][j] = 0;
			}
		cout << cnt[n][m];
		return 0;
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			cnt[i][j] = cnt[i - 1][j] + cnt[i][j - 1];
			for (int k = 0; k < 9; k++)
				if (i == mx + dx[k] && j == my + dy[k]) cnt[i][j] = 0;
		}
	cout << cnt[n][m];


	return 0;
}
2023/11/23 20:21
加载中...