首页 > 其他分享 >【题解】Typo

【题解】Typo

时间:2023-10-04 18:12:52浏览次数:28  
标签:int 题解 个数 括号 Typo 清零 define

Typo

Descreption

求反转一个不合法的括号序列中的一位使其成为一个合法序列的方案数(保证方案一定存在)

Solution

其实也就是一道较复杂的模拟题

先判断哪一类括号数量更多,因为一定是将数量多的括号改成数量少的才有可能变为合法序列,这里就先用左括号举例

记录每个位置时没有配对的左括号个数,当遇到一个左括号时,做两件事情:

  1. 如果左括号个数为正,那么方案数加1,也就是说如果将这一位改成右括号,前面有可以与其配对的左括号

  2. 将左括号个数加1

当遇到右括号时,同样做两件事情:

  1. 将左括号个数减1,因为右括号一定可以和前面的某个左括号匹配

  2. 如果左括号个数为1,根据题目给出的潜规则,此时后面只有两种情况,而两种情况都需要清零:

    • 紧跟着一个左括号,这个左括号必须反转,与前面“落单”的括号匹配,因此方案数清零

    • 紧跟着一个右括号,此时看到的字符串是合法的,因此方案数仍然清零

右括号多的情况与其对称,只需将整个序列反过来,然后把右括号当成上文的左括号处理

Code

#include <bits/stdc++.h>
#define gcd(a,b) b?gcd(b,a%b):a
#define lcm(a,b) a/(gcd(a,b))*b
#define lowbit(x) x&(-x)
using namespace std;
string s;
int n,cntl,cntr,ans;

signed main(){
	cin>>s;
	int n=s.size();
	for(int i=1;i<=n;i++){
		if(s[i]=='(')cntl++;
		else cntr++;
	}
	if(cntl<cntr){
		int right=0;
		reverse(s.begin(),s.end());
		for(int i=0;i<n;i++){
			if(s[i]==')'){
				if(right)ans++;
				right++;
			}
			else right--;
			if(right==1)ans=0;
		}
	}
	else{
		int left=0;
		for(int i=0;i<n;i++){
			if(s[i]=='('){
				if(left)ans++;
				left++;
			}
			else left--;
			if(left==1)ans=0;
		}
	}
	cout<<ans<<endl;
	return 0;
}

标签:int,题解,个数,括号,Typo,清零,define
From: https://www.cnblogs.com/FrankC/p/17737313.html

相关文章

  • CF1234(Div. 3) 题解(A to E)
    AEqualizePricesAgain题解题目大意\(n\)个商品,每个商品价格为\(a_i\),求一个最小的价格\(x\),使得不亏本(即\(\sum\limits_{i=1}^n{(a_i-x)}\ge0\))。解题思路输出平均数向上取整(即\(\left\lceil(\sum\limits_{i=1}^n{a_i})\divn\right\rceil\))即可。代码#include<bit......
  • 项链 题解
    随机化写法很强,但是这里不说。这里只记录数据结构写法。枚举右端点,快速找左端点。首先一种合法的方案中,一种颜色只会有两种情况。全部在区间中及全部在区间外。对于区间外的情况,也就是最后一次出现的位置\(p\)大于右端点\(r\),我们可以维护当前枚举右端点之前的所有颜色非......
  • CF1203(Div. 3) 题解(C to F1)
    由于太懒了,所以不想(会)写\(\texttt{AB}\)和\(\texttt{F2}\)。CCommonDivisors题解题目大意给定一个长度为\(n\)的数列\(\{a_i\}\),求\(\sigma(\gcd\limits_{i\in[1,n]}\{a_i\})\)。解题思路先算出所有元素的最大公因数,如果最大公因数\(g\)为\(1\),即所有元素两两......
  • CF1873(Div. 4) 题解 (A to E)
    AShortSort题解题目大意给定一个长度为\(3\)、由\(a,b,c\)组成的字符串,问可以不变或交换两个字符是的变为\(\texttt{abc}\)。解题思路由于大小固定,所以预处理可行的字符串(仅包含\(\texttt{abcacbbaccba}\))即可。代码#include<bits/stdc++.h>usingnamespacest......
  • 题解 CF1034C【Region Separation】/ SS221116D【Xiong AK 10 IOI】
    很妙的性质题!全是意识流证明见过吗?problem每次选一个非空边集删掉,谓之曰砍树。砍树后需要满足每个连通块的点权和相同。在一个方案中可以砍很多次树,都要满足砍树后的要求。一共有多少种合法方案呢?\(n\leq10^6,1\leqa_i\leq10^9\)。solution假如我们将树砍成\(k\)个连通......
  • 传奇团子师傅题解
    传奇团子师傅题解(模拟退火)申明:本篇题解借鉴了:https://www.luogu.com.cn/blog/SDNetFriend/solution-p7218这篇博客(主要在bitset部分)。题意:给你个矩阵,包含三种颜色,一个美丽串要求你横着或者竖着或者斜着串成一串的三个颜色有特定的顺序,求拿取最多美丽串的方案是什么。题目分......
  • 【UVA 442】Matrix Chain Multiplication 题解(栈)
    假设您必须计算一个表达式,如ABCDE,其中A、B、C、D和E是矩阵。由于矩阵乘法是关联的,所以执行乘法的顺序是任意的。然而,所需的初等乘法的数量很大程度上取决于求值顺序您可以选择。例如,设A为5010矩阵,B为1020矩阵,C为205矩阵。有两个计算ABC的不同策略,即(AB)C和A(B*C)。第一个需要1500......
  • Hadoop问题解决记(2)
     1.发现问题在对HBase集群进行压力测试过程中发现,当实际写入HBase和从HBase查询的量是平时的若干倍时(集群规模10~20台,每秒读写数据量在几十万条记录的量级),导致集群的读写出现一定程度的波动。具体如下:1)写端抛出以下异常信息:org.apache.hadoop.hbase.client.RetriesExha......
  • Hadoop问题解决记(1)
    最近在测试HBase时遇到一个非常奇怪的问题:集群有7台机器,其中1台Master,6台RegionServer。但是Master只能控制其中1台RegionServer,而无法控制其他5台RegionServer。打开master的日志文件,发现以下错误信息:2011-04-2216:37:21,242WARNorg.apache.hadoop.hbase.master.Assignment......
  • 『题解』P9688
    题目传送门思路:设有两个颜色\(x_1x_2\),两端分别为\(l_1\)\(r_1\),\(l_2\)\(r_2\)。通过观察可以发现,若满足\(x_1<x_2\)且\(r_1>l_2\)则\(x_1x_2\)一定是单调不下降的。那么我们可以先预处理出一个颜色可以与前面的哪些颜色构成单调不下降,然后用dp求出最终答案......