虽然ac了 但是代码有问题
#include<iostream>
using namespace std;
int main()
{
int n;cin>>n;
int q[n][n],cmax=1,max=0,num=0;
for(int i=0;i<n;i++)
{
getchar();//吸收回车
for(int j=0;j<n;j++)
q[i][j]=getchar()-'0';
}
int LineEnd=n-1,RowEnd=n-1;
for(int i=0;i<=LineEnd;i++)
for(int j=0;j<=RowEnd;j++)
if(q[i][j]==1) //棋盘左上角必为1 →按行、列递增寻找1
{
int cnt=1,cnt1=1,cnt2=1,sgn=-1;//开始寻找当前这个1能组成的最大棋盘
for(int x=i+1,y=j+1;x<n,y<n;x++,y++)
if(q[x][y]==1) cnt++;//棋盘对角线必为1
else break;
for(int y=j+1;y<j+cnt;y++) //横着找
{
if(q[i][y]==q[i][y-1]+sgn*1) cnt1++;
else break;
sgn*=-1;
}
sgn=-1;
for(int x=i+1;x<i+cnt;x++)//竖着找
{
if(q[x][j]==q[x-1][j]+sgn*1) cnt2++;
else break;
sgn*=-1;
}
cnt1>cnt2 ? cmax=cnt2:cmax=cnt1;
if(cmax>max)//当前的1能组成的最大规模大于已知最大规模
{
num=0;//计数归零
LineEnd=RowEnd=n-cmax;//查找范围更新
max=cmax;
}
if(cmax==max) num++;
}
cout<<max<<" "<<num;
}