HDU 6299

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define maxn 5000006
using namespace std;

int l[maxn] , r[maxn] , c[maxn] , lensum;
char s[maxn];

inline bool cmp(const int &a,const int &b)
{
	if ((l[a] >= r[a]) != (l[b] >= r[b])) return ((l[a] >= r[a]) == 1 );
	if ((l[a] >= r[a])) return r[a] < r[b];
	return l[a] > l[b];
}

int main()
{
    int T , n;
    scanf("%d",&T);
    for(;T--;)
	{
		int tsum=0;lensum = 0;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
			l[i] = r[i] = 0;
			scanf("%s",s);
			int len = strlen(s);
			lensum+=len;
			for(int j=0;j<len;j++)
			{
				if(s[j] == '(') l[i]++;
				else
					if(l[i]) l[i]--;
					else r[i]++;
			}
			tsum+=l[i] - r[i];
			c[i] = i;
		}
		sort(c+1,c+1+n,cmp);

		int sum=0 , Min=0;
		for(int i=1,u;i<=n;i++)
		{
			u = c[i];
			Min = min(Min , sum - min(l[u] , r[u]) - (r[u] > l[u]) * (r[u] - l[u]));
			sum += l[u] - r[u];
		}

		printf("%d\n",lensum - tsum + 2 * Min);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35950004/article/details/81182538