改前60,改后0分
查看原帖
改前60,改后0分
393811
大海中的孤帆楼主2023/7/10 18:43

改前代码

#include<iostream>
using namespace std;
int map[30][30];
int x[8]={1,2,2,1,-1,-2,-2,-1};
int y[8]={2,1,-1,-2,-2,-1,1,2};
int xx[2]={0,1},yy[2]={1,0};
int w[500000][2];
int fuck;
void f(int a,int b)
{
	if(map[a][b]==-1)
		return;
	if(a==0&&b==0)
	{
		fuck++;
		return;
	}
	if(a>0)
		f(a-1,b);
	if(b>0)
		f(a,b-1);
}
int main()
{
	int x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	map[x2][y2]=-1;
	for(int i=0;i<8;++i)
	{
		if(x2+x[i]>=0&&y2+y[i]>=0)
		map[x2+x[i]][y2+y[i]]=-1;
	}
	f(x1,y1);
	cout<<fuck;
	return 0;
}

改后代码

#include<iostream>
using namespace std;
int map[30][30];
int w[1010][1010];
int x[8]={1,2,2,1,-1,-2,-2,-1};
int y[8]={2,1,-1,-2,-2,-1,1,2};
int xx[2]={0,1};
int yy[2]={1,0};
int f(int a,int b)
{
	if(map[a][b]==-1)
		return 0;
	if(a==0&&b==0)
	{
		return 1;
	}
	if(a>0)
	{
		if(w[a-1][b]==0)
			w[a-1][b]=f(a-1,b);
	}
	if(b>0)
	{
		if(w[a][b-1]==0)
			w[a][b-1]=f(a,b-1);
	}
	return w[a-1][b]+w[a][b-1];
}
int main()
{
	int x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	map[x2][y2]=-1;
	for(int i=0;i<8;++i)
	{
		if(x2+x[i]>=0&&y2+y[i]>=0)
			map[x2+x[i]][y2+y[i]]=-1;
	}
	cout<<f(x1,y1);
	return 0;
}

样例都过了,不理解为啥第二个0分

2023/7/10 18:43
加载中...