mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
|
#include <cstdio>
|
|||
|
#include <cstring>
|
|||
|
#include <algorithm>
|
|||
|
|
|||
|
using namespace std;
|
|||
|
|
|||
|
int n,m,al,bl,cl,lim;
|
|||
|
char a[205],b[205],c[405];
|
|||
|
bool dp[205][205];//dp[i][j]表示串a的前i个字符与串b的前j个字符是否能形成串c的前i+j个字符
|
|||
|
|
|||
|
int main() {
|
|||
|
int T,kase=0;
|
|||
|
scanf("%d",&T);
|
|||
|
while(kase<T) {
|
|||
|
scanf("%s%s%s",a+1,b+1,c+1);
|
|||
|
al=strlen(a+1);
|
|||
|
bl=strlen(b+1);
|
|||
|
cl=al+bl;
|
|||
|
memset(dp,false,sizeof(dp));
|
|||
|
dp[0][0]=true;
|
|||
|
for(int k=1;k<=cl;++k) {//枚举串c的字符
|
|||
|
lim=min(k,al);
|
|||
|
for(int i=max(1,k-bl);i<=lim;++i) {//在a串上进行状态转移
|
|||
|
if(dp[i-1][k-i]&&a[i]==c[k])//如果串a前i-1个字符与串b前k-i个字符能构成串c的前k个字符,并且当前a[i]==c[k]
|
|||
|
dp[i][k-i]=true;
|
|||
|
}
|
|||
|
lim=min(k,bl);
|
|||
|
for(int j=max(1,k-al);j<=lim;++j) {//在b串上进行状态转移
|
|||
|
if(dp[k-j][j-1]&&b[j]==c[k])//如果串a前k-j个字符与串b前j-1个字符能构成串c的前k个字符,并且当前b[j]==c[k]
|
|||
|
dp[k-j][j]=true;
|
|||
|
}
|
|||
|
}
|
|||
|
printf("Data set %d: %s\n",++kase,dp[al][bl]?"yes":"no");
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|