D题50

#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;
int cnt[3];
string s;
int n,a,b;
int id[1021],fa[1021];
int col[1021];
bool vis[1021];
int idcnt=0;
stack<int> sta;
int rht_to[1021];
int main(){
	cin >> n >> a >> b;
	cin >> s;
	s="("+s+")";
	for(int i=0,len=s.length();i<len;i++){
		if(s[i]=='('){
			id[i]=++idcnt;
			if(sta.empty()){
				fa[id[i]]=id[i];
			} else{
				fa[id[i]]=sta.top();
			}
			sta.push(id[i]);
		} else{
			id[i]=sta.top();
			
			sta.pop();
		}
	}
	for(int i=0;i<n+2;i++){
		if(s[i+1]=='(')	rht_to[id[i]]=id[i+1];
		else	rht_to[id[i]]=fa[id[i]];
//		cout << rht_to[id[i]] << ' ';
	}
//	cout << '\n';
//	for(int i=0;i<n+2;i++){
//		cout << id[i] << ' ';
//	}
//	cout << '\n';
	col[0]=0;
	for(int i=1,len=s.length()-1;i<len;i++){
		if(vis[id[i]]){
//			cout << col[id[i]] << ' ';
			continue;
		}	
		if(col[id[i-1]]==col[rht_to[id[i]]]){
			col[id[i]]=(col[id[i-1]]==1?2:1);
		} else{
			col[id[i]]=(3-col[id[i-1]]-col[rht_to[id[i]]])%3;
		}
		vis[id[i]]=1;
		++cnt[col[id[i]]];
//		cout << col[id[i]] << ' ';
	}
	sort(cnt,cnt+3);
	cout << cnt[2]*max(a,b)+cnt[1]*min(a,b);
	return 0;
}

我的代码,只有50分,有hack吗?

全部评论

相关推荐

06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务