我想尝试用最朴素的方法
??为啥十分(竟然没有超时)求助
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e2+7;
int n,a[MAXN][MAXN],ans;
bool check(int x,int y,int x2,int y2){
int xx=x,yy=y2,xx2=x2,yy2=y;
while(xx<=xx2&&yy>=yy2){
if(!a[xx][yy]) return false;
if(!a[xx2][yy2]) return false;
xx++,yy--,xx2--,yy2++;
}
while(x<=x2&&y<=y2){
if(!a[x][y]) return false;
if(!a[x2][y2]) return false;
x++,y++,x2--,y2--;
}
return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
char s;cin>>s;
a[i][j]=s-'0';
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(a[i][j]==0) continue;
for(int i2=i+1;i2<=n;i2++)
for(int j2=j+1;j2<=n;j2++){
if(a[i2][j2]==0) continue;
if(check(i,j,i2,j2))
ans++;
}
}
cout<<ans<<endl;
return 0;
}
/*
2
11
11
*/
谢谢