码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 990C

时间:2018-07-12 21:44:20      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:结果   std   return   代码   多少   codeforce   sum   for   注意   

题意略。

思路:

本题实质上就是在问一共有多少种合理的匹配,使得括号匹配合法。我给每种情况编号,用一个cnt来记录,( 则cnt += 1;) 出现则cnt -= 1。

最后只要把相反数的个数相乘后相加就可以得到最后的结果。但是要注意,像  )(  这样的串是没有意义的,

因为不可能有别的串来匹配它来使这两个串合法。当然,没有意义的串有可能不会这么显式,也有可能出现   ()))(  这种。

我们在检查这个串的时候,记录它cnt的最小值,如果后来这个cnt变大了,就说明这个串已经变得没有意义了。

详见代码:

#include<bits/stdc++.h>
#define maxn 300005
using namespace std;
typedef long long LL;

LL cnt[maxn * 2];
char str[maxn];

int main(){
    int n;
    scanf("%d",&n);
    for(int i = 0;i < n;++i){
        scanf("%s",str);
        int len = strlen(str);
        int lowest = 0;
        int temp = 0;
        for(int j = 0;j < len;++j){
            if(str[j] == () temp += 1;
            else temp -= 1;
            lowest = min(lowest,temp);
        }
        if(lowest < 0 && lowest < temp) continue;
        cnt[temp + maxn] += 1;
    }
    LL sum = 0;
    for(int i = 0;i <= maxn;++i){
        if(cnt[i] == 0) continue;
        int cur = i - maxn;
        int nxt = -1 * cur + maxn;
        sum += cnt[i] * cnt[nxt];
    }
    printf("%lld\n",sum);
    return 0;
}

 

Codeforces 990C

标签:结果   std   return   代码   多少   codeforce   sum   for   注意   

原文地址:https://www.cnblogs.com/tiberius/p/9301855.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!