トピックリンク:
ポータル
タイトルの説明:
PIPIは、有効な角かっこシーケンスを提供します。左角かっこ下付き文字の昇順で、シーケンス内の角かっこの各ペアの添え字を表示したいと思います。(添え字は1から始まります)
入力:
複数のデータセット
最初の行には、「( '、')」のみを含む文字列が含まれています。入力した角かっこ一致シーケンスが正当であり、長さが100000を超えていないことを確認してください。
出力:
シーケンス内の括弧の各ペアのインデックスは、左括弧のインデックスの昇順で示されます。
サンプル入力:
(())()()
サンプル出力:
1 4
2 3
5 6
7 8
ヒント:
出力の順序に注意してください〜
問題の落とし穴:
もう1つ(。
C ++参照コード:
#include <cstdio>
#include <stack>
#include <string>
#include <cstring>
using namespace std;
struct pos{
int left;
int right;
};
char a[100100];
int main()
{
pos temp1,temp2;
stack<pos>s1;
stack<int>s2;
while(scanf("%s",a)!=EOF)
{
for(int i=strlen(a)-1;i>=0;i--)
{
if(a[i]==')')
s2.push(i+1);
else if(!s2.empty())//有一组数据多出了一个(,不然运行错误33%。
{
temp1.right=s2.top();
temp1.left=i+1;
s1.push(temp1);
s2.pop();
}
}
int j=s1.size();
for(int i=0;i<j;i++)
{
temp2=s1.top();
printf("%d %d\n",temp2.left,temp2.right);
s1.pop();
}
}
return 0;
}