题意:https://www.luogu.com.cn/problem/CF990C
思路:首先我们应该去除一些无法匹配的串,就是当我们每次遇到右括号时则去消除一个左括号,如果最后左右括号都有剩余那么这个串则是无法匹配的。
/*keep on going and never give up*/
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
#define int long long
typedef pair<int, int> pii;
#define lowbit(x) x&(-x)
#define endl '\n'
#define wk is zqx ta die
string s[300006];
int ll[300005];
int rr[300005];
signed main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
int cnt = 0;
for (int i = 1; i <= n; i++) {
int l = 0, r = 0;
for (auto j : s[i]) {
if (j == '(') {
l++;
} else {
if (l != 0) {
l--;
} else {
r++;
}
}
}
if (l && r) {
continue;
} else {
if (l) {
ll[l]++;
} else if (r) {
rr[r]++;
} else {
cnt++;
}
}
}
int ans = cnt * cnt;
for (int i = 1; i <= 300000; i++) {
ans += ll[i] * rr[i];
}
cout << ans << endl;
return 0;
}