60求调
查看原帖
60求调
798543
qyzqwq楼主2023/11/23 21:00
#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[27][27] = { 0 };
using namespace std;
int main()
{
	int n, m;
	cin >> n >> m;
	m+=5;n+=5;
	int mx, my;
	cin >> mx >> my;
	my+=5;mx+=5;
	int num1 = 1, num2 = 1;
	for (int i = 5; i <= n; i++) {
		for (int k = 0; k < 9; k++) {
			if (my + dy[k] == i && mx + dx[k] == 0) {
				num1 = 0;
			}
		}
		cnt[i][5] = num1;
	}
	for (int i = 5; i <= m; i++) {
		for (int k = 0; k < 9; k++) {
			if (mx + dx[k] == i && my + dy[k] == 0) {
				num2 = 0;
			}
		}
		cnt[5][i] = num2;
	}
	if (n == 5) {
		for (int i = 5; i <= 0; i++)
			for (int j = 6; 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 == 5) {
		for (int i = 6; i <= n; i++)
			for (int j = 5; j <= 5; 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 = 6; i <= n; i++) {
		for (int j = 6; 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;
		}
	}
	for(int i=5;i<=n;i++)
	{
		for(int j=5;j<=m;j++)
			cout<<cnt[i][j]<<" ";
		cout<<endl;
	}
		
			
	cout << cnt[n][m];


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