30分求调
查看原帖
30分求调
1434846
ACs_King楼主2025/8/2 19:42
#include<bits/stdc++.h>
using namespace std;
int t,n,m;
string s1,s2;
bool check(string a,int lena,string b,int lenb){
	string s;
	int pos1,pos2,flag=0;
	pos1=s2.find(s1);
	if(pos1>lenb) return 0;
	pos2=pos1+lena;
	for(int i=0;i<pos1;i++) s+=b[i];
	for(int i=pos2;i<lenb;i++) s+=b[i];
	if(s.size()!=lena) return 0;
	for(int i=0;i<lena;i++)
		if(s[i]!=a[i]) {flag=1;break;}
	return flag==0?1:0;
}
int main(){
	cin>>t;
	while(t--){
		int flag=0,i=0,j=0;
		cin>>n>>m>>s1>>s2;
		if(m==n*2&&check(s1,n,s2,m)){
			cout<<"Yes"<<endl;
			continue;
		}if(n==m){
			while(i<n&&j<m){
				if(s1[i]!=s2[j]){
					flag=1;break;
				}
				i++,j++;
			}
			if(flag){
				cout<<"No"<<endl;
				continue;
			}
			cout<<"Yes"<<endl;
			continue;
		}
		while(i<n&&j<m){
			if(s1[i]==s2[j]) i++,j++;
			if(flag==0&&s1[i]!=s2[j]){
				while(s1[i]!=s2[j]) j++;
				flag=1;				
			}if(flag==0&&i>=n){
				cout<<"Yes"<<endl;
				break;
			}else if(flag==1&&i>=n&&j>=m){
				cout<<"Yes"<<endl;
				break;
			}else if(flag==1&&i>=n&&j<m){
				cout<<"No"<<endl;
				break;
			}else if(flag==1&&s1[i]!=s2[j]){
				cout<<"No"<<endl;
				break;
			}
		}
	}
	return 0;
}
2025/8/2 19:42
加载中...