ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

D. Bicolored RBS---简单思维--Educational Codeforces Round 65 (Rated for Div. 2)

2021-06-05 18:54:28  阅读:177  来源: 互联网

标签:Bicolored Rated 颜色 嵌套 -- printf int mac 深度


Bicolored RBS

time limit per test 2 seconds
memory limit per test 256 megabytes

题目链接http://codeforces.com/problemset/problem/1167/D

在这里插入图片描述
在这里插入图片描述


题目大意:给你一个正确的括号序列,让你染两种颜色,使得这两种颜色的括号序列的最大嵌套深度最小。比如题目的(())嵌套深度为2,可以将其染成2种颜色使得每种颜色的嵌套深度为1:()+()

实际上样例很有迷惑性,我们可以直接将嵌套深度为最大深度/2以上的(包含)染成一种颜色,其余的染成另一种颜色,这样一来如果它本身的最大嵌套深度为偶数就刚好平分,否则的话也是一半-1和一半+1,也是最小的分法。

以下是AC代码:

#include <bits/stdc++.h>
using namespace std;
const int mac=2e5+10;
char s[mac];
int a[mac];
int main()
{
	int n;
	scanf ("%d",&n);
	scanf ("%s",s+1);
	a[1]=1;
	int ma=0;
	for (int i=2; i<=n; i++){//计算每个括号的嵌套深度
		if (s[i]=='('){
			if (s[i-1]=='(') a[i]=a[i-1]+1;
			else a[i]=a[i-1];
		} 
		else {
			if (s[i-1]=='(') a[i]=a[i-1];
			else a[i]=a[i-1]-1;
		}
		ma=max(ma,a[i]);//取最大的嵌套深度
	}
	//for (int i=1; i<=n; i++) printf ("%d ",a[i]);
	int lim=ma;
	ma/=2;
	ma--;
	ma=lim-ma;
	for (int i=1; i<=n; i++){
		//if (a[i]==1) printf ("0");
		if (a[i]>=ma) printf ("0");
		else printf ("1");
	}
	printf ("\n");
	return 0;
}

标签:Bicolored,Rated,颜色,嵌套,--,printf,int,mac,深度
来源: https://blog.51cto.com/u_15249461/2870385

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有