Description
- 有两个字符串 t t t 和 s s s ,问你 t t t 能否通过添括号的方式修改成 s s s ,使得 s s s 是匹配的。
- 给定 s s s 和 t t t,多组数据。
Solution
如果考虑一步一步让 t t t 变成 s s s ,就会比较复杂(我一开始也是这么想的),但我们可以换个思路,即只需考虑 t t t 能否变成 s s s ,就很简单了,只需判断一下 t t t 是否是 s s s 的字串就可以了。
另外还需判断一下 s s s 本身是否是匹配的。
Code
#include<bits/stdc++.h>//写得比较乱QwQ
using namespace std;
int T,n,m,top;
char s[505000],t[1005000];//还有就是为啥这里开成string就过不了了,调了好久/kk
char stk[1005000];
int check(){
for(int i=0;i<m;++i){
if(t[i]=='('||t[i]=='[')stk[++top]=t[i];
else if(t[i]==')'){
if(stk[top]=='(')--top;
else return 0;
}
else{
if(stk[top]=='[')--top;
else return 0;
}
}
if(top)return 0;
return 1;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
scanf("%s",s);scanf("%s",t);
top=0;
if(check()==0){printf("Wrong Answer\n");continue;}
int i=0,j=0;
for(;i<m;++i){
if(s[j]==t[i])++j;
if(j==n)break;
}
if(j!=n){printf("Wrong Answer\n");continue;}
printf("Accepted\n");
}
return 0;
}