Rikka with Parenthesis II
2016-08-24 10:58
405 查看
Rikka with Parenthesis II
.
.
题意:给定一个由“(”,“)”组成的序列,看交换其中两个位置的符号使得序列合法(一定要交换)。
.
.
解法:弄一个队列如果出现相邻的()就出队,然后记录有多少种不合法的情况,比如队列开头为),那么就把这个替换成(,并记录有一个不合法,如果最终队列不为空且最后为(,那么替换成)并记录。最后如果恰好只有两个或没有不合法那么就可以了。注意特判一下长度为2的“()”这种情况就好了。
.
.
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; const int maxn = 100010; char c[maxn]; int n, m, correct, l, r; int main() { //freopen("a.in","r",stdin); int tt; scanf("%d", &tt); while (tt--) { scanf("%d", &n); m = 0; correct = 0; l = 0; r = 0; for (int i = 1; i <= n; i++) { m++; cin >> c[m]; if (c[m] == '(') l++; if (c[m] == ')') r++; if (m == 1 && c[m] == ')') { correct++; c[m] = '('; } while (m >= 2 && c[m] == ')' && c[m-1] == '(' ) { m = m-2; } } if (m > 0) { c[m] = ')'; correct++; } while (m >= 2 && c[m] == ')' && c[m-1] == '(' ) { m = m-2; } if (l != r) { printf("No\n"); continue; } if (l == 1 && correct == 0) { printf("No\n"); continue; } if (correct != 0 && correct != 2) { printf("No\n"); continue; } if (m > 0) { printf("No\n"); continue; } printf("Yes\n"); } }
相关文章推荐
- 【1】【栈模拟】HDU5831 Rikka with Parenthesis II
- Rikka with Parenthesis II---hdu5831(括号匹配)
- HDU5831(2016多校第八场)———Rikka with Parenthesis II(水题)
- hdu_5831_Rikka with Parenthesis II(模拟)
- hdu 5831 Rikka with Parenthesis II
- HDU 5831 Rikka with Parenthesis II (贪心) -2016杭电多校联合第8场
- 浙工大姗姗杯round1 F - Rikka with Parenthesis II
- hdu 5831 (Rikka with Parenthesis II)
- hdu-5831 Rikka with Parenthesis II(贪心)
- hdu5831 Rikka with Parenthesis II(水)
- HDU 5831 Rikka with Parenthesis II
- 2016 Multi-University Training Contest 8 1011 Rikka with Parenthesis II(模拟)
- 16 多校8 Rikka with Parenthesis II
- HDU5831 Rikka with Parenthesis II
- (HDU 5831)2016 Multi-University Training Contest 8 Rikka with Parenthesis II(水?)
- hdu 5831 Rikka with Parenthesis II
- HDU 5831 Rikka with Parenthesis II(栈的使用)
- 2016多校8 hdu5831 Rikka with Parenthesis II 水题
- HDU 5831 Rikka with Parenthesis II
- HDU 5831 Rikka with Parenthesis II