#include<stdio.h>
int n,q,x,y,i,j,all[1010010],k[1010][1010],t;
char mp[1010][1010],vis[1010][1010];
int dfs(int x,int y){
int ans=1;
vis[x][y]=1;k[x][y]=t;
if(x>1&&mp[x][y]^mp[x-1][y]&&!vis[x-1][y])ans+=dfs(x-1,y);
if(y>1&&mp[x][y]^mp[x][y-1]&&!vis[x][y-1])ans+=dfs(x,y-1);
if(x<n&&mp[x][y]^mp[x+1][y]&&!vis[x+1][y])ans+=dfs(x+1,y);
if(y<n&&mp[x][y]^mp[x][y+1]&&!vis[x][y+1])ans+=dfs(x,y+1);
return ans;
}
int main(){
scanf("%d%d",&n,&q);
for(i=1;i<=n;++i)scanf("%s",mp[i]+1);
for(i=1;i<=n;++i)for(j=1;j<=n;++j)
if(!vis[i][j])all[++t]=dfs(i,j);
while(q--)
scanf("%d%d",&x,&y),
printf("%d\n",all[k[x][y]]);
return 0;
}
记录
数组没开太大,1e6*(4+4+1+1)/1024/1024约等于9MB.