CF 990C. Bracket Sequences Concatenation Problem【栈/括号匹配】
【链接】:CF
【题意】:
给出n个字符串,保证只包含'('和')',求从中取2个字符串链接后形成正确的括号序列的方案数(每个串都可以重复使用)(像'()()'和'(())'这样的都是合法的,像')('和'('这样的是不合法的)
输入:
第一行一个整数n
第二行到第n+1行每行一个字符串
输出:
方案数
【分析】:
1.本来就正常的,只能和正常匹配的一起
2.本来就不正常匹配的,只能和不正常匹配的在一起
那么对于每一个串,我们处理出它还需要cnt1个'('和cnt2个')'
如果cnt1,cn2>0,不管在左边还是右边加串,都不可行
如果cnt10&&cnt20已经是正常匹配
如果cnt1>0,cnt2==0,该串的右边需要cnt1个')'
如果cnt1==0,cnt2>0,该串的左边需要cnt2个')'
那么只要把需要cnt个左边的和cnt个右边的放在一起就一定可以匹配上了
复杂度O(n)
【代码】:
#include<bits/stdc++.h>
#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<<l<<' '<<r<<endl;
if(l==0&&r==0) ans++;
else if(l!=0&&r!=0) continue;
else if(l==0&&r!=0) cntl[r]++;
else if(l>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;
}
CF 990C. Bracket Sequences Concatenation Problem【栈/括号匹配】的更多相关文章
- CF思维联系– Codeforces-990C Bracket Sequences Concatenation Problem(括号匹配+模拟)
ACM思维题训练集合 A bracket sequence is a string containing only characters "(" and ")" ...
- CF990C Bracket Sequences Concatenation Problem 思维 第五道 括号经典处理题目
Bracket Sequences Concatenation Problem time limit per test 2 seconds memory limit per test 256 meg ...
- Bracket Sequences Concatenation Problem括号序列拼接问题(栈+map+思维)
A bracket(括号) sequence is a string containing only characters "(" and ")".A regu ...
- Bracket Sequences Concatenation Problem CodeForces - 990C(括号匹配水题)
明确一下 一个字符串有x左括号不匹配 和 另一个字符串有x个右括号不匹配 这俩是一定能够匹配的 脑子有点迷 emm... 所以统计就好了 统计x个左括号的有几个,x个右括号的有几个 然后 乘一 ...
- leetcode 栈 括号匹配
https://oj.leetcode.com/problems/valid-parentheses/ 遇到左括号入栈,遇到右括号出栈找匹配,为空或不匹配为空, public class Soluti ...
- LeetCode 20 Valid Parentheses (括号匹配问题)
题目链接 https://leetcode.com/problems/valid-parentheses/?tab=Description Problem: 括号匹配问题. 使用栈,先进后出! ...
- (CodeForces - 5C)Longest Regular Bracket Sequence(dp+栈)(最长连续括号模板)
(CodeForces - 5C)Longest Regular Bracket Sequence time limit per test:2 seconds memory limit per tes ...
- Codeforces 5C Longest Regular Bracket Sequence(DP+括号匹配)
题目链接:http://codeforces.com/problemset/problem/5/C 题目大意:给出一串字符串只有'('和')',求出符合括号匹配规则的最大字串长度及该长度的字串出现的次 ...
- SDUT-2134_数据结构实验之栈与队列四:括号匹配
数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...
随机推荐
- 自定义 Relam
package org.zln.hello.realm; import org.apache.shiro.authc.*; import org.apache.shiro.realm.Realm; / ...
- 大数据Hadoop-2
大数据Hadoop学习之搭建Hadoop平台(2.1) 关于大数据,一看就懂,一懂就懵. 大数据的发展也有些年头了,如今正走在风口浪尖上,作为小白,我也来凑一份热闹. 大数据经过多年的发展,有着不同的 ...
- JSOI2004 平衡点 / 吊打XXX [模拟退火]
题目描述 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到 ...
- 根据select创建input并赋值
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- JAVA多线程---好的博客资源收集
个人笔记,备忘 1.http://blog.csdn.net/column/details/concurrency.html 兰亭风雨的专栏 2.http://lavasoft.blog.51c ...
- js 扒一扒这些题目都考了哪些知识点
1.空数组是true还是false 题目: <script> var tmp = 'a'; if([]==false) tmp+='b'; if(![]) tmp +='c'; alert ...
- JVM 性能排查--查看哪个对象占用内存大
参考:http://blog.csdn.net/chenleixing/article/details/44227327/ 1. 在IE地址栏中输入:http://localhost/test/in ...
- bzoj1574 [Usaco2009 Jan]地震损坏Damage
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1574 [题解] 贪心把report的点的旁边所有点破坏即可. # include <s ...
- bzoj 1050: [HAOI2006]旅行comf&&【codevs1001】
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最 ...
- 硬币问题 tarjan缩点+DP 莫涛
2013-09-15 20:04 题目描述 有这样一个游戏,桌面上摆了N枚硬币,分别标号1-N,每枚硬币有一个分数C[i]与一个后继硬币T[i].作为游戏参与者的你,可以购买一个名为mlj的小机器人, ...