不久前图灵杯的C题括号匹配,一开始我是用getchar()将大括号一个个读入,然后就《西江月·夜行黄沙道中》了。后来改成scanf('%s',s)的形式直接一次性输入,A了。两种方式本地样例测试都是对的,想问一下各位大佬是为什么会出问题。
括号匹配原代码:
#include<bits/stdc++.h>
using namespace std;
int n,p;
stack<int> ss;
int main(){
cin>>n>>p;
getchar();
for(int i=1;i<=n;++i){
char c=getchar();
if(c=='{'){
ss.push(i);
}
if(c=='}'){
if(ss.empty()){
continue;
}
if(i==p){
cout<<ss.top();
break;
}
if(ss.top()==p){
cout<<i;
break;
}
ss.pop();
}
}
return 0;
}
修改后代码:
#include<bits/stdc++.h>
using namespace std;
int n,p;
stack<int> ss;
char s[100010];
int main(){
cin>>n>>p;
scanf("%s",s+1);
for(int i=1;i<=n;++i){
char c=s[i];
if(c=='{'){
ss.push(i);
}
if(c=='}'){
if(ss.empty()){
continue;
}
if(i==p){
cout<<ss.top();
break;
}
if(ss.top()==p){
cout<<i;
break;
}
ss.pop();
}
}
return 0;
}