4 2 (()) 1 3 2 3 2 1 () 1 2Sample Output
No Yes No
题解:就是一个括号配对问题。
下面附上代码:
#include
#include
#include
using namespace std;
char str[100005];
int main()
{
int n, m;
while(~scanf("%d%d", &n, &m))
{
scanf("%s", str+1);
int a, b;
for(int i = 1; i <= m; i++)
{
scanf("%d%d", &a, &b);
if(a>b) swap(a,b);
if(str[b]=='(' || str[a] == str[b])//这个地方不加前面的str[b]=='(',就会超时。
{
printf("Yes\n");
continue;
}
swap(str[a], str[b]);
int ans = 0;
for(int i = 1; i <= n; i++)
{
if(str[i] == '(') ans++;
else ans--;
if(ans < 0) { printf("No\n"); break;}
}
if(ans == 0) printf("Yes\n");
swap(str[a], str[b]);
}
}
return 0;
}