#include<bits/stdc++.h>
using namespace std;
int a[510101][2];
int main()
{
string s;
cin>>s;
stack<int>q;
int t=0;
int l=0;
for(int i=0; i<(int)s.size(); i++)
{
t++;
if(s[i]=='(')
q.push(t);
else if(s[i]==')')
{
if(q.empty())
{
printf("No\n");
return 0;
}
a[l][0]=q.top();
a[l][1]=t;
l++;
q.pop();
}
}
if(q.empty())
{
printf("Yes\n");
for(int i=0; i<l; i++)
{
cout<<a[i][0]<<" "<<a[i][1]<<endl;
}
}
else
printf("No\n");
return 0;
}
方法二:
#include<bits/stdc++.h>
using namespace std;
int a[510101][2];
int main()
{
string s;
cin>>s;
stack<int>q;
queue<int>p;
int t=0;
for(int i=0; i<(int)s.size(); i++)
{
t++;
if(s[i]=='(')
q.push(t);
else if(s[i]==')')
{
if(q.empty())
{
printf("No\n");
return 0;
}
p.push(q.top());
p.push(t);
q.pop();
}
}
if(q.empty())
{
printf("Yes\n");
while(!p.empty())
{
cout<<p.front()<<" ";
p.pop();
cout<<p.front()<<endl;
p.pop();
}
}
else
printf("No\n");
return 0;
}