Problem Statement
题目链接:https://vjudge.net/contest/239445#problem/E
E -
Problem Statement
You are given nn strings str1,str2,…,strnstr1,str2,…,strn , each consisting of ( and ). The objective is to determine whether it is possible to permute the nn strings so that the concatenation of the strings represents a valid string.
Validity of strings are defined as follows:
- The empty string is valid.
- If AA and BB are valid, then the concatenation of AA and BB is valid.
- If AA is valid, then the string obtained by putting AA in a pair of matching parentheses is valid.
- Any other string is not valid.
For example, "()()" and "(())" are valid, while "())" and "((()" are not valid.
Input
The first line of the input contains an integer nn (1≤n≤1001≤n≤100 ), representing the number of strings. Then nn lines follow, each of which contains stristri (1≤|stri|≤1001≤|stri|≤100 ). All characters in stristri are ( or ).
Output
Output a line with "Yes" (without quotes) if you can make a valid string, or "No" otherwise.
Sample Input 1
3
()(()((
))()()(()
)())(())
Output for the Sample Input 1
Yes
Sample Input 2
2
))()((
))((())(
Output for the Sample Input 2
No
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
const ll mod=1e9+;
const int maxn=2e2+;
const int maxk=+;
const int maxx=1e4+;
const ll maxe=+;
#define INF 0x3f3f3f3f3f3f
typedef pair<int,int>P;//用来存储有多少个(和)first是(的个数,second是)的个数
P p[maxk];
char s[maxk];
bool vis[maxk];
int n;
P solve(char s[])//这一步操作是消去本来该字符串就能消去的()
{//这里学到了,竟然是用pair型来定义函数,长见识了
int l=,r=;
for(int i=;s[i];i++)
{
if(s[i]=='(') l++;
else if(l) l--;
else r++;
}
return P(l,r);//返回值也应当是pair型
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
int cnt=;//用来存储只有(的字符串中( 的总个数
for(int i=;i<n;i++)
{
cin>>s;
p[i]=solve(s);
if(!p[i].second) cnt+=p[i].first,i--,n--;//存储下来了直接删掉
}
int ans=,ret=;//ans用来存储有多少个)
memset(vis,false,sizeof(vis));//用来标记字符串是否已经用过了
int mx,id;
for(int i=;i<n&&ret;i++)
{
mx=-,id=-;
for(int j=;j<n;j++)
{
if(vis[j]||ans<p[j].first) continue;//这里为何要ans>p[j].first,因为如果>的话,那么本个字符串后面的(全部可以消除
int k=p[j].second-p[j].first;//这是消去了(还剩多少个)
if(k>mx)
{
mx=k;
id=j;//这里用到了点贪心,就是每次都保留最多的),
}
}
if(id==-) ret=;//如果还没到最后一个字符串就已经没有选择了,代表消不了,直接退出
vis[id]=true;
ans+=mx;
}
if(ans==cnt&&ret) cout<<"Yes"<<endl;//不仅仅ans=cnt,ret也要刚好为1
else
cout<<"No"<<endl;
return ;
}
Problem Statement的更多相关文章
- C#学习日志 day10 -------------- problem statement
Revision History Date Issue Description Author 15/May/2015 1.0 Finish most of the designed function. ...
- URAL 1881 Long problem statement
1881. Long problem statement Time limit: 0.5 secondMemory limit: 64 MB While Fedya was writing the s ...
- Google Code Jam 2010 Round 1A Problem A. Rotate
https://code.google.com/codejam/contest/544101/dashboard#s=p0 Problem In the exciting game of Jo ...
- Google Code Jam 2010 Round 1B Problem A. File Fix-it
https://code.google.com/codejam/contest/635101/dashboard#s=p0 Problem On Unix computers, data is s ...
- http://codeforces.com/problemset/problem/594/A
A. Warrior and Archer time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces Round #296 (Div. 1) B. Clique Problem 贪心
B. Clique Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Google Code Jam 2014 Round 1 A:Problem C. Proper Shuffle
Problem A permutation of size N is a sequence of N numbers, each between 0 and N-1, where each numbe ...
- Google Code Jam 2014 资格赛:Problem B. Cookie Clicker Alpha
Introduction Cookie Clicker is a Javascript game by Orteil, where players click on a picture of a gi ...
- 0/1 knapsack problem
Problem statement Given n items with size Ai and value Vi, and a backpack with size m. What's the ma ...
随机推荐
- 洛谷【P1177】【模板】基数排序
题目传送门:https://www.luogu.org/problemnew/show/P1177 我对计数排序的理解:https://www.cnblogs.com/AKMer/p/9649032. ...
- Django-进阶 分页,中间件
知识预览 分页 中间件 回到顶部 分页 Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Cr ...
- vijos1779国王游戏
描述 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这n位大臣排成一排,国王站在队伍的最前面.排好队后, ...
- Python:模块详解及import本质
转于:http://www.cnblogs.com/itfat/p/7481972.html 博主:东大网管 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), ...
- TS学习之类
定义类 class Person { name: string; //属性 constructor(_name: string) { this.name = _name; } //构造函数 sayHe ...
- mongodb-help功能
mongo-help功能 version:2.6.12下面是示例: > help db.help() help on db methods db.m ...
- 关于android 数据库查询出现 _id column do not exist 的处理
查询的字段必须带上_id字段,否则就会出现此类异常,导致程序崩溃
- mahout 实现canopy
环境: mahout-0.8 hadoop-1.1.2 ubuntu-12.04 理论这里就不说了,直接上实例: 下面举一个例子. 数据准备: canopy.dat文件,COPY到HDFS上,文件内容 ...
- Prim算法:最小生成树---贪心算法的实现
算法图解: http://baike.baidu.com/link?url=hGNkWIOLRJ_LDWMJRECxCPKUw7pI3s8AH5kj-944RwgeBSa9hGpTaIz5aWYsl_ ...
- hibernate查询的方式和变量
1.实体查询: hql="FROM User"; List list= session.createQuery(hql).list(); for(Object obj:list){ ...