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吗?

全部评论

相关推荐

07-10 14:08
已编辑
江西农业大学 Java
拒绝无效加班的小学生...:期望3k吗?java这辈子有了
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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