PIPIOJ-1036: 括号匹配
又是一个很迷的题目,明明很简单,但总是错误33%…😢😢)
1036: 括号匹配
题目描述:
PIPI给你一个合法的括号序列,希望跟你按左括号下标递增顺序给出每对括号在序列中的下标。(下标从1开始)
输入:
多组数据
第一行包括一个只包含’(’,’)'的字符串,保证输入的括号匹配序列合法,长度不超过100000
输出:
按左括号下标递增顺序给出每对括号在序列中的下标。
样例输入
(())()()
样例输出
1 4
2 3
5 6
7 8
我的AC代码:
#include<bits/stdc++.h>
using namespace std;
stack<int> st;
typedef pair<int,int> pir;
int main(){
string str;
while(getline(cin,str)){
vector<pir> v;
while(!st.empty()) st.pop();
int len = str.length();
for(int i=0;i<len;i++){
if(str[i] == '('){
st.push(i+1);
}else if(!st.empty()&&str[i] == ')'){
///这里题目应该有问题 这里不判断为右括号错误33%
int x;
x = st.top();
v.push_back({x,i+1});
st.pop();
}
}
sort(v.begin(),v.end()); ///按first元素递增排序
for(int i=0;i<v.size();i++){
printf("%d %d\n",v[i].first,v[i].second);
}
}
return 0;
}
因为题目中说了只要左括号和右括号,所以我一开始if那判断就没有判断右括号了,因为不是左括号就肯定是有括号了吧。。。但是就是错误33%,结果找了很久,最后加了这一句就过了。。。。。我是没想明白的,总觉得题目有问题。。。有木有老铁知道呀~
分割线分割一下,今天做了一道简单的字符串匹配题,我的个神又错33%感觉和这个很像,明明感觉没啥错误却老是AC不过,结果将getline改成cin 就就就AC!!!!!!
所以大噶能用cin>>s就别用getline(cin,s)吧 。。。。。然后我将上面那个代码没有加那条判断右括号的语句再将读入改为了cin>>str就通过了…