acm问题-有关ACM的括号配对问题

问题描述

有关ACM的括号配对问题

问题:括号配对问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([])
样例输出
No
No
Yes

我的代码:总是出现WrongAnswer
#include
#include
#include
using namespace std;
int main()
{
int N;
int j=0;
int f1[5]={0,0,0,0,0};//[的个数
int f2[5]={0,0,0,0,0};//]的个数
int d1[5]={0,0,0,0,0};//(的个数
int d2[5]={0,0,0,0,0};//)的个数

int g=1;//判断只包含
int a1;//用于判断[]配对
int a2;//用于判断()配对
cin>>N;
vector s(4);
if(0<N && N<5)
{

for(j=0;j<N;j++)
{

   cin>>s[j];
   //判断只包含[]()
  for(int k=0;k<s[j].size();k++)
  {
    if(!(s[j][k]=='[' || s[j][k]==']' || s[j][k]=='(' || s[j][k]==')'))
    { g=0;}
  }

}

for(j=0;j<N;j++)

{ a1=0;a2=0;
for(int e=0;e<5;e++)
{
f1[e]=0;
f2[e]=0;
d1[e]=0;
d2[e]=0;
}
//判断[和]个数一样,(和)个数一样
for(int h=0;h<s[j].size();h++)
{
if(s[j][h]=='[') f1[j]++;
if(s[j][h]==']') f2[j]++;
if(s[j][h]=='(') d1[j]++;
if(s[j][h]==')') d2[j]++;
}
//判断配对
for(int r=0;r<s[j].size();r++)
{
if(s[j][r]=='[') a1++;
if(s[j][r]==']') a1--;
if(a1<0) break;
if(s[j][r]=='(') a2++;
if(s[j][r]==')') a2--;
if(a2<0) break;
}
if(0<s[j].size() && s[j].size()<10000 && g==1 )

{

      if(s[j].size()>=3)
      {
          int p=1;
          for(int t=0;t<s[j].size()-2;t++)
          { //若字符串含有([)或(])或[(]或[)]这样的字符串则不配对
            if( (s[j][t]=='(' && s[j][t+1]=='[' && s[j][t+2]==')') || (s[j][t]=='(' && s[j][t+1]==']' && s[j][t+2]==')')|| (s[j][t]=='[' && s[j][t+1]=='(' && s[j][t+2]==']')|| (s[j][t]=='[' && s[j][t+1]==')' && s[j][t+2]==']'))
            { p=0;}
          }

         if(p==0 || f1[j]!=f2[j] || d1[j]!=d2[j] || a1<0 || a2<0)
         {cout<<"No"<<endl;}
         else {cout<<"Yes"<<endl;}
      }
      if(s[j].size()<3)
            if(s[j]=="[]"||s[j]=="()") cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
 }

}
}
return 0;
}

时间: 2024-09-16 19:43:28

acm问题-有关ACM的括号配对问题的相关文章

c++ acm 括号配对-c++编写的ACM中的括号配对问题

问题描述 c++编写的ACM中的括号配对问题 最近在做ACM上的题目,在vs上写了一个括号配对的程序能运行出来,但是放到ACM上就是各种错误,最多的是runtimeerror,下面附上程序,希望高手能指点一下.. #include #include #include #include using namespace std; int main() { int N; //测试数据组 cin>>N; if(N100) { cout<<"please input number

nyoj2括号配对问题

点击打开链接 题目2 题目信息 运行结果 本题排行 讨论区 括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组.数据保证S中只含有"[","]","(",&quo

acm icpc-一个acm题目问下,应该不会很难,但是么做出来

问题描述 一个acm题目问下,应该不会很难,但是么做出来 发票统计 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个小型的报账系统,它有如下功能: (1)统计每个人所报发票的总钱数 (2)统计每类发票的总钱数 将此系统简化为如下:假设发票类别共有A.B.C三种;一共有三个人,ID分别为1.2.3. 输入 系统输入包含三行,每行第一个数为人员ID(整型,1或2或3),第二个数为发票总张数(张数不超过100),之后是多个发票类别(字符型,A或B或C)和相应

acm 算法 暴力-acm水题求解,关于贪心算法

问题描述 acm水题求解,关于贪心算法 #include #include #include using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop / ???? int main(int argc, char* argv) { ???? int M,N; ???? while(cin>>M&g

括号匹配

括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个 字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组.数据保证S中只含有"[","]","(",")"四种字符 输出 每组输入数据的输出占一行,如

UVa 10129:Play on Words, 欧拉道路

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105&page=show_problem&problem=1070 题目类型: 欧拉道路 题目: Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve

算法题之poj 1961 Period(KMP, 最短循环节)

题目链接: POJ  : http://poj.org/problem?id=1961 HDU : http://acm.hdu.edu.cn/showproblem.php?pid=1358 ZOJ   : http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2177 题目大意: 给定一个长度为n的字符串s,求它的每个前缀的最短循环节.换句话说,对于每个i (2<=i<=n),求一个最大的整数K>1(如果K存在),使

算法题:HDU 1251 统计难题(字典树,统计前缀个数)

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 题目 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组 成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的 前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师 交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提

java画金字塔,但是程序无响应

问题描述 java画金字塔,但是程序无响应 import acm.program.*; import acm.graphics.*; public class jinzita extends GraphicsProgram{ public static final double BRICK_WIDTH=10; public static final double BRICK_HEIGHT=4; public static final double BRICK_IN_BASE=10; public