就是字面意思,下面这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;
}
有大佬帮看一看嘛