第十六个点WA了求助(关注)!!!
查看原帖
第十六个点WA了求助(关注)!!!
488827
Super_Supper楼主2021/12/25 09:43
#include <iostream>
using namespace std;
const int N = 1005;
int n,m,ans;
char a[N][N];
bool v[N][N];
struct AC{
  int x,y,ans;
} c[N];
int dfs(int x,int y,int step){
  if(x - step < 1 || x + step > n || y - step < 1 || y + step > m){
    return step - 1; // 如果越界就返回
  }
  if(a[x - step][y] == '*' && a[x + step][y] == '*' && a[x][y - step] == '*' && a[x][y + step] == '*'){ // 如果满足条件就标记并继续搜
    v[x][y] = v[x - step][y] = v[x + step][y] = v[x][y - step] = v[x][y + step] = 1;
    return dfs(x,y,step + 1);
  }
  return step - 1; // 不满足条件
}
int main(){
  cin >> n >> m;
  for(int i = 1;i <= n;i++){
    for(int j = 1;j <= m;j++){
      cin >> a[i][j];
    }
  }
  for(int i = 2;i < n;i++){
    for(int j = 2;j < m;j++){
      if(a[i][j] == '*'){
        int res = dfs(i,j,1);
        for(;res;res--){ // 存入位置、大小
          c[++ans].ans = res;
          c[ans].x = i;
          c[ans].y = j;
        }
      }
    }
  }
  for(int i = 1;i <= n;i++){
    for(int j = 1;j <= m;j++){       
      if(!v[i][j] && a[i][j] == '*'){
        cout << -1; // 如果有*不属于任何星星输出-1
        return 0;
      }
    }
  }
  cout << ans << '\n';
  for(int i = 1;i <= ans;i++){
    cout << c[i].x << ' ' << c[i].y << ' ' << c[i].ans << '\n'; // 输出答案
  }
  return 0;
}

第十六个点我输出-1,但标准答案不是-1,求大佬帮助,我都要改吐了QAQ

2021/12/25 09:43
加载中...