90,第二个wa,求助
查看原帖
90,第二个wa,求助
574945
SCAU_anpuren楼主2021/11/10 20:12
#include <iostream>
#include<queue>
#include<string.h>
using namespace std;
int mg[1500][1500];
int pd[1500][1500]={0};
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int k=1;
int ans[100050]={0};
int sum;
int a[100050];
int b[100050];
struct point
{
    int sz;
    int x;
    int y;
};
int main()
{
  char ch;
  int n,m;
  cin>>n>>m;
  for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) {cin>>ch; mg[i][j]=ch-'0';}
  for(int i=1;i<=m;i++) cin>>a[i]>>b[i];
  for(int i=1;i<=n;i++)
  {
      for(int j=1;j<=n;j++)
      {
      if(!pd[i][j])
      {
      sum=1;
      pd[i][j]=k;
      queue<point>r;
      point ks;
      ks.x=i;
      ks.y=j;
      ks.sz=mg[i][j];
      r.push(ks);
      while(!r.empty())
      {
        int x1=r.front().x;
        int y1=r.front().y;
        for(int j=0;j<4;j++)
        {
            if(mg[x1+dx[j]][y1+dy[j]]!=r.front().sz&&!pd[x1+dx[j]][y1+dy[j]]&&x1+dx[j]<=n&&x1+dx[j]>=1&&y1+dy[j]<=n&&y1+dy[j]>=1)
            {
                pd[x1+dx[j]][y1+dy[j]]=k;
                point temp;
                temp.x=x1+dx[j];
                temp.y=y1+dy[j];
                temp.sz=mg[x1+dx[j]][y1+dy[j]];
                r.push(temp);
                sum++;
            }
        }
        r.pop();
      }
      ans[k]=sum;
      k++;
      }
      }
  }
  for(int i=1;i<=m;i++)
  {
      int q=a[i];
      int p=b[i];
    cout<<ans[pd[q][p]]<<endl;
  }
}
2021/11/10 20:12
加载中...