比赛 CSP2023-J模拟赛 评测结果 ATTTTTTTTT
题目名称 复制题目 最终得分 10
用户昵称 袁书杰 运行时间 9.000 s
代码语言 C++ 内存使用 5.92 MiB
提交时间 2023-10-18 21:08:18
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0;
char c[305][305];
struct node {
	char a;
	int pos;
};
int dx[5]= {1,0};
int dy[5]= {0,1};
void dfs(int x,int y,string string1) {
	if(string1!="") {
		int number=0;
		stack<node>s;
		int len=string1.size();
		s.push(node {string1[0],1});
		for(int i=1; i<len; i++) {
			if(s.empty()) {
				s.push(node {string1[i],i+1});
				continue;
			}
			char c1=s.top().a;
			if(string1[i]==')'&&c1=='(') {
				number+=((i+1)-s.top().pos);
				s.pop();
			} else {
				s.push(node {string1[i],i+1});
			}
		}
		if(s.empty()) {
			ans=max(ans,number);
		}
		for(int i=0; i<=1; i++) {
			int nx=dx[i]+x;
			int ny=dy[i]+y;
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m) {
				dfs(nx,ny,string1+c[nx][ny]);
			}
		}
	}
}
int main() {
	freopen("copy.in","r",stdin);
	freopen("copy.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			cin>>c[i][j];
		}
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			if(c[i][j]==')') {
				continue;
			}
			dfs(i,j,"(");
		}
	}
	cout<<ans;
	return 0;
}