博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF 990C. Bracket Sequences Concatenation Problem【栈/括号匹配】
阅读量:5063 次
发布时间:2019-06-12

本文共 1364 字,大约阅读时间需要 4 分钟。

【链接】:

【题意】:
给出n个字符串,保证只包含'('和')',求从中取2个字符串链接后形成正确的括号序列的方案数(每个串都可以重复使用)(像'()()'和'(())'这样的都是合法的,像')('和'('这样的是不合法的)
输入:
第一行一个整数n
第二行到第n+1行每行一个字符串

输出:

方案数
【分析】:
1.本来就正常的,只能和正常匹配的一起

2.本来就不正常匹配的,只能和不正常匹配的在一起

那么对于每一个串,我们处理出它还需要cnt1个'('和cnt2个')'

如果cnt1,cn2>0,不管在左边还是右边加串,都不可行

如果cnt1==0&&cnt2==0已经是正常匹配

如果cnt1>0,cnt2==0,该串的右边需要cnt1个')'

如果cnt1==0,cnt2>0,该串的左边需要cnt2个')'

那么只要把需要cnt个左边的和cnt个右边的放在一起就一定可以匹配上了

复杂度O(n)

【代码】:

#include
#define PI acos(-1.0)#define pb push_back#define F first#define S second#define debug puts#define setp cout << fixed << setprecision(3)#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);using namespace std;typedef long long ll;const int N=3e5+5;const int MOD=1e9+7;const ll INF=1e18+8;ll cntl[N],cntr[N];int main(void){ FAST_IO; int n; cin >> n; ll ans=0; for(int i=1;i<=n;i++){ string s; cin >>s; int l=0,r=0; for(int i=0;s[i];i++){ if(s[i]=='(') l++; else{ if(l>0) l--; else r++; } } //cout<
<<' '<
<
0&&r==0) cntr[l]++; } ans*=ans; for(int i=1; i<=3e5; i++){ if(cntl[i]>0 && cntr[i]>0) ans+=cntl[i]*cntr[i]; } cout << ans << endl; return 0;}

转载于:https://www.cnblogs.com/Roni-i/p/9215513.html

你可能感兴趣的文章
ant 安装
查看>>
新手Python第一天(接触)
查看>>
vue路由动态加载
查看>>
【原】UIWebView加载本地pdf、doc等文件
查看>>
iOS中ARC内部原理
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
你不得不了解的应用容器引擎---Docker
查看>>
easyui datagrid 弹出页面会出现两个上下滚动条处理办法!
查看>>
迭代器和生成器
查看>>
MYSQL分区表功能测试简析
查看>>
codevs 1080 线段树练习
查看>>
JS模块化库seajs体验
查看>>
Android内核sysfs中switch类使用实例
查看>>
POJ2288 Islands and Bridges(TSP:状压DP)
查看>>
POJ3250 Bad Hair Day(单调栈)
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
IOS开发UI篇--UITableView的自定义布局==xib布局
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>