题目链接:https://codeforces.com/contest/1451/problem/C
题意:给出长度n的字符串a和b,判断能否将a转化为b,字符串仅包含小写字母。只能进行两种操作:①将字符串a中任意两个相邻的字符调换;②在a中,给连续的且长度为k的子串,若每个字符都相等,可以给它们都+1,如k=2,abba->acca。
题解思路:
由于只能将小的转化为大的,那么a串要匹配b串,可以考虑从字母’a’开始匹配到字母’z’,每次匹配要求字符串a中可以转化或直接匹配字母数大于等于b中对应字母数。
每次匹配完后,剩下的字母一定要进行转换,因此必须为k倍数。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
char a[maxn],b[maxn];
int main(void){
//freopen("in.txt","r",stdin);
int t;
scanf("%d",&t);
while (t--)
{
int n,k;
scanf("%d %d",&n,&k);
scanf("%s %s",a+1,b+1);
int num1[26]={0},num2[26]={0};
for(int i=1;i<=n;i++){
num1[a[i]-'a']++;
num2[b[i]-'a']++;
}
int flg=0;
int sum=0;
for(int i=0;i<26;i++){
sum+=num1[i];
if(sum<num2[i]){
flg=1; break;
}
sum-=num2[i];
if(sum%k){
flg=1;break;
}
}
if(flg)printf("No\n");
else printf("Yes\n");
}
return 0;
}