括号匹配 约定不等于承诺〃 2022-01-07 04:37 303阅读 0赞 <table> <tbody> <tr> <td colspan="3"> <h2>括号匹配</h2> </td> </tr> <tr> <td align="right">Accepted : 30</td> <td> </td> <td align="left">Submit : 225</td> </tr> <tr> <td align="right">Time Limit : 10000 MS</td> <td> </td> <td align="left">Memory Limit : 65536 KB </td> </tr> </tbody> </table> http://202.197.224.59/OnlineJudge2/index.php/Contest/read\_problem/cid/38/pid/1232 #### 题目描述 #### 有一串括号(只包含"(", ")", "\[", "\]", "\{", "\}"), 保证这一括号串是匹配的, 长度小于100000, 有m个询问, 每个询问为一个整数x;对于每一个询问, 要求输出一行四个整数y, a, b, c; 表示第x个括号是跟第y个配对的, x和y之间有a对小括号, b对中括号, c对大括号。 #### 输入 #### 约200个样例, 每个样例第一行为一个只包含括号的长度小于100000的字符串, 第二行一个小于100000的整数m, 接下来m行每行一个整数x,x不大于括号字符串的长度, x > 0; #### 输出 #### 每个询问输出一行四个整数y, a, b, c,用空格隔开。每个样例之后输出一个空行 #### 样例输入 #### (){}[] 3 1 3 5 [([{()[]}])][()] 5 1 2 5 13 14 #### 样例输出 #### 2 0 0 0 4 0 0 0 6 0 0 0 12 2 2 1 11 1 2 1 6 0 0 0 16 1 0 0 15 0 0 0 理解不了先存着 #include<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #include<string.h> #include<queue> #include<stack> using namespace std; #define maxn 100005 char s[maxn]; struct node { int k, index;//小括号0,中括号1,大括号2 int r[4], pre; }; node a[maxn]; int main() { while(scanf("%s", s+1) != EOF) { int i, x; int val[200]={0}; node q; stack <node> sta; memset(a, 0, sizeof(a)); val['('] = 1;val['['] = 2;val['{'] = 3; val[')'] = 4;val[']'] = 5;val['}'] = 6; for(i=1; s[i]; i++) { a[i].k = val[s[i]]; a[i].index = i; if(a[i].k <= 3) sta.push(a[i]); else { q = sta.top();sta.pop(); a[i].pre = q.index; q.pre = i; if(sta.size()) { node t = sta.top();sta.pop(); t.r[1] += q.r[1], t.r[2] += q.r[2], t.r[3] += q.r[3]; t.r[ q.k ] += 1; sta.push(t); } a[q.index] = q; } } int N, j; scanf("%d", &N); for(i=0; i<N; i++) { scanf("%d", &x); j = min(x, a[x].pre); printf("%d %d %d %d\n", a[x].pre, a[j].r[1], a[j].r[2], a[j].r[3]); } printf("\n"); } return 0; } 自己一直超时代码: #include<iostream> #include<stdio.h> using namespace std; #define min(a, b)(a < b ? a : b) #define N 100009 char str[N]; struct node { int y, a, b, c; }P[N]; int main() { int i, j, m, x, y, a, b, c, d, q, A, B, C; while(scanf("%s", str) != EOF) { for(j = 0; str[j]; j++) { d = 1; q = 0; P[j].y = P[j].a = P[j].b = P[j].c = 0; a = b = c = A = B = C = 0; if(str[j] == '(') { for(i = j+1; str[i]; i++) { if(str[i] == '(') d++; else if(str[i] == ')') { q++; if(q == d) { y = i; break; } } } } if(str[j] == '[') { for(i = j+1; str[i]; i++) { if(str[i] == '[') d++; else if(str[i] == ']') { q++; if(q == d) { y = i; break; } } } } if(str[j] == '{') { for(i = j+1; str[i]; i++) { if(str[i] == '{') d++; else if(str[i] == '}') { q++; if(q == d) { y = i; break; } } } } for(i = j; i < y; i++) { if(str[i] == ')') a++; else if(str[i] == '(') A++; else if(str[i] == '{') c++; else if(str[i] == '}') C++; else if(str[i] == '[') b++; else if(str[i] == ']') B++; } a = min(a, A); b = min(b, B); c = min(c, C); P[j].y = y+1, P[j].a = a, P[j].b = b, P[j].c = c; } cin >> m; while(m--) { cin >> x; printf("%d %d %d %d\n", P[x-1].y, P[x-1].a, P[x-1].b, P[x-1].c); } } return 0; } ideas: 知道的还是太少太少,well,well,well 转载于:https://www.cnblogs.com/Tinamei/p/4459650.html
相关 【Java】括号匹配 \{\} 括号匹配模式 解题思路 栈 import java.util.Scanner; import java.util.Stack; 心已赠人/ 2022年12月09日 04:53/ 0 赞/ 195 阅读
相关 表达式括号匹配 题目描述 假设一个表达式有英文字母(小写)、运算符`(+,—,,/)`和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配, 忘是亡心i/ 2022年12月01日 01:24/ 0 赞/ 180 阅读
相关 括号匹配 <table style="width:1615px; margin-bottom:20px; background-color:transparent"> <tbody> 秒速五厘米/ 2022年06月02日 08:53/ 0 赞/ 235 阅读
相关 括号匹配 [题目 括号匹配][Link 1] 一般的括号匹配问题是这样的: 给出一个字符串,判断这个括号匹配是不是合法的括号匹配。如”((” 和 “())”都不是合法的括号匹配 我会带着你远行/ 2022年05月18日 00:55/ 0 赞/ 189 阅读
相关 括号匹配 栈的应用,括号匹配。 经典做法是,遇左括号压入,遇右括号判断,和栈顶配对就继续,不配对或者栈空就错了。最后判断是否为空。 代码有些麻烦。 我是遇左括号压对应的右括号,最后 你的名字/ 2022年05月06日 06:28/ 0 赞/ 232 阅读
相关 括号匹配 题目描述 假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“\[”和“\]”和花括号“\{”和“\}”,且这三种括号可按任意的次序嵌套使用(如:…\ ╰半橙微兮°/ 2022年03月30日 02:28/ 0 赞/ 270 阅读
相关 括号匹配 PTA 02:括号匹配 一、题目 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,\[ \],\{ \} 冷不防/ 2022年02月27日 15:54/ 0 赞/ 321 阅读
相关 括号匹配 <table> <tbody> <tr> <td colspan="3"> <h2>括号匹配</h2> </td> </tr> <tr> 约定不等于承诺〃/ 2022年01月07日 04:37/ 0 赞/ 304 阅读
相关 括号匹配 include<stdio.h> include<stack> using namespace std; stack <int> s;//定义一 叁歲伎倆/ 2021年12月01日 17:44/ 0 赞/ 307 阅读
相关 括号匹配 括号配对问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行 怼烎@/ 2021年09月22日 07:20/ 0 赞/ 384 阅读
还没有评论,来说两句吧...