关于刚才入门赛兔子病毒
查看原帖
关于刚才入门赛兔子病毒
551788
Miyamizu_Mitsuha楼主2023/8/11 21:03

除了样例,只对了最后一个点。其他wa。思路是先判断所有雌的,四个方向打上标记不能走,然后枚举每一个雄的,检测四个方向有几个格子没有标记,大于等于三答案加一。 然后清空标记,把上面的步骤雌雄反着来一遍。

#include <stdio.h>
#include <iostream>
using namespace std;
#define int long long
signed main(){
  char map[1005][1005];
   int ans=0;
  int mark[1005][1005]={0};
  int r,c,n,m;
  cin>>r>>c>>n>>m;
  for(int i=1;i<=r;i++)
  {
    for(int j=1;j<=c;j++)
    {
      cin>>map[i][j];
    }
  }
  for(int i=1;i<=r;i++)
  {
    for(int j=1;j<=c;j++)
    {
      if(map[i][j]=='F')
      {
        mark[i][j]=1;
        mark[i-1][j]=1;
        mark[i+1][j]=1;
        mark[i][j-1]=1;
        mark[i][j+1]=1;
      }
    }
  }
 
  for(int i=1;i<=r;i++)
  {
    for(int j=1;j<=c;j++)
    {
      int e=0;
      if(map[i][j]=='M')
      {
        if(mark[i-1][j]==0)e++;
        if(mark[i+1][j]==0)e++;
        if(mark[i][j-1]==0)e++;
        if(mark[i][j+1]==0)e++;
      }
      if(e>=3)ans++;
    }
  }
  for(int i=1;i<=1005;i++)
  {
    for(int j=1;j<=1005;j++)
    {
      mark[i][j]=0;
    }
  }
  for(int i=1;i<=r;i++)
  {
    for(int j=1;j<=c;j++)
    {
      if(map[i][j]=='M')
      {
        mark[i][j]=1;
        mark[i-1][j]=1;
        mark[i+1][j]=1;
        mark[i][j-1]=1;
        mark[i][j+1]=1;
      }
    }
  }
  
  for(int i=1;i<=r;i++)
  {
    for(int j=1;j<=c;j++)
    {
      int e=0;
      if(map[i][j]=='F')
      {
        if(mark[i-1][j]==0)e++;
        if(mark[i+1][j]==0)e++;
        if(mark[i][j-1]==0)e++;
        if(mark[i][j+1]==0)e++;
      }
      if(e>=3)ans++;
    }
  }
  // for(int i=1;i<=r;i++)
  // {
  //   for(int j=1;j<=c;j++)
  //   {
  //     cout<<mark[i][j]<<" ";
  //   }
  //   cout<<endl;
  // }
  cout<<ans;
return 0;
}
2023/8/11 21:03
加载中...