最后一个点wa,有注释,求大佬看看问题
查看原帖
最后一个点wa,有注释,求大佬看看问题
489854
ming0819楼主2022/3/7 16:25

最后一个点wa:14 16 7 5 答案:39217645 我的答案:39217630;求大佬看看问题

#include<bits/stdc++.h>
using namespace std;
int x1,y11,x2,y2,flag=0,flag1=0;
long long a[21][21];
void initial(){  //第0行和第0列初始化为1,马点初始化为-1
                 
//	a[x1][y1]=-2;
	a[x2][y2]=-1;
	if(y2-1>=0)
		a[x2+2][y2-1]=-1; 
	a[x2+2][y2+1]=-1;
	if(y2-1>=0&&(x2-2>=0))
		a[x2-2][y2-1]=-1;
	if(x2-2>=0)
		a[x2-2][y2+1]=-1;
	if(y2-2>=0)
		a[x2+1][y2-2]=-1;
	a[x2+1][y2+2]=-1;
	if(y2-2>=0&&(x2-1)>=0)
		a[x2-1][y2-2]=-1;
	if(x2-1>=0)
		a[x2-1][y2+2]=-1;
	for(int i=1;i<=x1;i++){
		if(flag1){         //第0行和第0列遇到-1,则之后都为0 
			a[0][i]=0;
		}else{
			if(a[0][i]==-1) {
				flag1=1;
				a[0][i]=0;
			}else
		     	a[0][i]=1;
		}
	}
	for(int i=1;i<=x1;i++){
		if(flag){
			a[i][0]=0;
		}else{
			if(a[i][0]==-1) {
				flag=1;
				a[i][0]=0;
			}else
				a[i][0]=1;
		}
	}		
}
int main(){
	cin>>x1>>y11>>x2>>y2;
	initial();
	for(int i=1;i<=x1;i++){
		for(int j=1;j<=y11;j++){
			if(a[i][j]==0){
				a[i][j]=a[i-1][j]+a[i][j-1]; //加上左和上的路径数 
			}else{
				a[i][j]=0;   //遇到马点 -1改为0 
			}
		}
	}
	cout<<a[x1][y11];
    return 0;
2022/3/7 16:25
加载中...