标签:font += top 连续子序列 har 长度 第一题 print freopen
今天集训第一题就是它,只是换了一下输出,输出最长的美观的连续子序列的长度。
刚开始做的时候,还想着这是栈的经典例题,然后我就默默地打了个队列(两个样例还过了一个),怕是石乐志了!!!!!陆陆续续调了一天!!!!!!这时候才想起来是栈。。。。。
还有一点:别忘了判断栈是否已经为空!!!!!!
1 #include <cstdio> 2 #include <string> 3 #include <stack> 4 #include <iostream> 5 6 std::string s; 7 8 int ans, maxn; 9 10 void fs() { 11 std::stack<char> q; 12 int len = s.length(); 13 for (int i = 0; i < len; ) { 14 while (s[i] == ‘(‘ || s[i] == ‘[‘ || s[i] == ‘{‘) { 15 q.push(s[i++]); 16 } 17 18 if (s[i] == ‘)‘) { 19 if (!q.empty() && q.top() == ‘(‘) { // !!!!!判断是否栈空,为此我 RE 了 4 个点 20 q.pop(), ans += 2, i++; 21 if (maxn < ans) maxn = ans; 22 } else { 23 while (s[i] == ‘)‘ || s[i] == ‘]‘ || s[i] == ‘}‘) i++; 24 while (!q.empty()) q.pop(); 25 ans = 0; 26 } 27 } else if (s[i] == ‘]‘) { 28 if (!q.empty() && q.top() == ‘[‘) { 29 q.pop(), ans += 2, i++; 30 if (maxn < ans) maxn = ans; 31 } else { 32 while (s[i] == ‘)‘ || s[i] == ‘]‘ || s[i] == ‘}‘) i++; 33 while (!q.empty()) q.pop(); 34 ans = 0; 35 } 36 } else if (s[i] == ‘}‘) { 37 if (!q.empty() && q.top() == ‘{‘) { 38 q.pop(), ans += 2, i++; 39 if (maxn < ans) maxn = ans; 40 } else { 41 while (s[i] == ‘)‘ || s[i] == ‘]‘ || s[i] == ‘}‘) i++; 42 while (!q.empty()) q.pop(); 43 ans = 0; 44 } 45 } 46 } 47 48 } 49 50 int main() { 51 freopen("sequence.in", "r", stdin); 52 freopen("sequence.out", "w", stdout); 53 54 std::cin >> s; 55 56 fs(); 57 58 printf("%d\n", maxn); 59 return 0; 60 }
2017.10.16
标签:font += top 连续子序列 har 长度 第一题 print freopen
原文地址:http://www.cnblogs.com/ExileValley/p/7677834.html