求助,为啥全屏TLE
查看原帖
求助,为啥全屏TLE
939580
xzy_caiji楼主2024/7/17 21:15
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;char a[55][55];
bool checkleft(int x,int y,int dx){
	for(int i=1;i<=dx;i++){
		if(a[x][y-i]!='-')return 0;
	}
	return 1;
}
bool checkright(int x,int y,int dx){
	for(int i=1;i<=dx;i++){
		if(a[x][y+i]!='-')return 0;
	}
	return 1;
}
bool checkup(int x,int y,int dx){
	for(int i=1;i<=dx;i++){
		if(a[x-i][y]!='|')return 0;
	}
	return 1;
}
bool checkdown(int x,int y,int dx){
	for(int i=1;i<=dx;i++){
		if(a[x+i][y]!='|')return 0;
	}
	return 1;
}


bool checkleftup(int x,int y,int dx){
	x--;y--;
	for(int i=1;i<=dx;i++){
		if(a[x][y]!='\\')return 0;
		x--;y--;
	}
	return 1;
}
bool checkrightup(int x,int y,int dx){
	x--;y++;
	for(int i=1;i<=dx;i++){
		if(a[x][y]!='/')return 0;
		x--;y++;
	}
	return 1;
}
bool checkleftdown(int x,int y,int dx){
	x++;y--;
	for(int i=1;i<=dx;i++){
		if(a[x][y]!='/')return 0;
		x++;y--;
	}
	return 1;
}
bool checkrightdown(int x,int y,int dx){
	x++;y++;
	for(int i=1;i<=dx;i++){
		if(a[x][y]!='\\')return 0;
		x++;y++;
	}
}
bool check90(int x,int y,int dx){
	if(checkleft(x,y,dx)&&checkright(x,y,dx)&&checkup(x,y,dx)&&checkdown(x,y,dx))return 1;
	return 0;
}
bool check45(int x,int y,int dx){
	if(checkleftup(x,y,dx)&&checkrightup(x,y,dx)&&checkleftdown(x,y,dx)&&checkrightdown(x,y,dx))return 1;
	return 0;
}
int check(int x,int y){
	for(int dx=min(n,m);dx>=0;dx--){
		if(x-dx<1||x+dx>n||y-dx<1||y+dx>m)continue;
		if(check90(x,y,dx)&&check45(x,y,dx))return dx;
	}
}
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=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a[i][j]=='+')ans=max(ans,check(i,j));
	cout<<ans;
	return 0;
}
2024/7/17 21:15
加载中...