神奇的10pts
查看原帖
神奇的10pts
520544
Phrvth楼主2022/9/24 19:26

我想尝试用最朴素的方法

??为啥十分(竟然没有超时)求助

#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
*/

谢谢

2022/9/24 19:26
加载中...