#5错了一个点
查看原帖
#5错了一个点
327139
纯白楼主2021/7/19 17:22

就是字面意思,下面这100个数就一个和答案不一样(哭

1 0 1 1 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 0 1 0 1 1 0 0 0 1 1 0 0 0 1 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 1 0// 1 就是这个// 0 1 1 0 1 1 1 1 0 0 1 1 0 1

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=2000;
const int inf=0x7f7f7f7f;
int s[maxn][maxn];
int f[maxn][maxn];
long long int p;
int a,b,t;
int n,m;
int w[4]={0,0,1,-1};
int q[4]={1,-1,0,0};
inline int read()
{
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
int dfs(int x, int y)
{
	if (f[x][y]) return f[x][y];
	for (int i=0; i<4; i++)
	{
		a=x+w[i],b=y+q[i];
		if (a == 0 || b == 0 || a > n || b > m)
			continue;
		if (s[x][y] == s[a][b])
		{
			 return f[x][y]=f[a][b]=1;

		}
		if (!f[x][y]) f[x][y] = inf;
		f[x][y] = min(f[x][y], dfs(a,b)+1);
	}
	return f[x][y];
}
int main ()
{
	n=read(),m=read(),t=read();

	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			scanf("%1d",&s[i][j]);
	if (n==m&&n==1)
	{
		while (t--)
		{
			printf("%d\n",s[n][m]);
		}
		return 0;
	}
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			dfs(i,j);
	while (t--)
	{
		scanf("%d%d",&a,&b);
		scanf("%lld",&p);
		if (f[a][b]==inf)
		{
			printf("%d\n",s[a][b]);
			continue;
		}
		
		p-=f[a][b];
		if (p<0)
		{
			printf("%d\n",s[a][b]);
			continue;
		}
		if (p%2)
			printf("%d\n",s[a][b]);
		else
			printf("%d\n",!s[a][b]);
	}
	return 0;
} 

有大佬帮看一看嘛

2021/7/19 17:22
加载中...