求hack!
查看原帖
求hack!
585805
MCRS_lizi楼主2022/2/24 21:53

90ptsWA,#7本来输出6,我的答案是4,有没有知道为什么或者可以提供hack的谢谢QAQ

#include<bits/stdc++.h>
using namespace std;
int n,xs,ys,a[101][101],ans;
bool used[101][101];
void dfs(int x,int y,int sum)
{
	//cout<<x<<" "<<y<<" "<<sum<<endl;
	ans=max(ans,sum);
	bool flag1=1,flag2=1;
	for(int i=x+1,j=x-1;i<=n||j>=1;i++,j--)
	{
		
		if(i<=n&&flag1&&!used[i][y]&&!a[i][y]&&i!=x+1)
		{
			used[i][y]=1;
			dfs(i,y,i-x+sum);
			used[i][y]=0;
			flag1=0;
		}
		if(j>=1&&flag2&&!used[j][y]&&!a[j][y]&&j!=x-1)
		{
			used[j][y]=1;
			dfs(j,y,x-j+sum);
			used[j][y]=0;
			flag2=0;
		}
		if(a[i][y]==0)
		{
			flag1=0;
		}
		if(a[j][y]==0)	
		{
			flag2=0;
		}
	}
	flag1=1,flag2=1;
	for(int i=y+1,j=y-1;i<=n||j>=1;i++,j--)
	{
		if(i<=n&&flag1&&!used[x][i]&&!a[x][i]&&i!=y+1)
		{
			used[x][i]=1;
			dfs(x,i,i-y+sum);
			used[x][i]=0;
			flag1=0;
		}
		if(j>=1&&flag2&&!used[x][j]&&!a[x][j]&&j!=y-1)
		{
			used[x][j]=1;
			dfs(x,j,y-j+sum);
			used[x][j]=0;
			flag1=0;
		}
		if(a[x][i]==0)
		{
			flag1=0;
		}
		if(a[x][j]==0)	
		{
			flag2=0;
		}
	}
}
int main()
{
	cin>>n>>xs>>ys;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	used[xs][ys]=1;
	dfs(xs,ys,0);
	cout<<ans;
	return 0;
}
2022/2/24 21:53
加载中...