20分求助
查看原帖
20分求助
1631069
wend02558楼主2025/1/1 14:00

样例结果是对的,但是只有2过了,1、5WA,3、4TLE

#include<cstdio>
int h[9][2]={{0,0},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
int walk[2][2]={{1,0},{0,1}};
int n,m,a,b,ans;

void f(int x,int y);
bool check(int x,int y);

int main(){
	scanf("%d %d %d %d",&n,&m,&a,&b);//B(n,m) 马(a,b) 
	ans=0;
	for (int i=0;i<9;i++) {
		h[i][0]+=a,h[i][1]+=b;
	}
	f(0,0);
	printf("%d",ans);
	return 0;
}

void f(int x,int y){
	if (x==n&&y==m){
		ans++;
		return;
	}
	
	for (int i=0;i<2;i++){
		int p=x+walk[i][0],q=y+walk[i][1];
		if (p<=m&&p>=0&&q<=n&&q>=0&&check(p,q)){
			f(p,q);
		}
	}
	return;
}

bool check(int x,int y){
	for (int i=0;i<9;i++){
		if (x==h[i][0]&&y==h[i][1]){
			return false;
		}
	}
	return true;
}
2025/1/1 14:00
加载中...