• CF1451C String Equality 题解


    题意分析

    给出两个仅由小写字母组成的字符串 $a,b$ ,可以对字符串 $a$ 的字母进行顺序变换或者把连续的 $k$ 个相同的字母换为 ASCII 码更大的字母,求 $a$ 是否能变换成 $b$ 。

    思路分析

    显然对于类似冒泡的操作 $1$ ,相当于可以任意变换字母的顺序,因此我们只关心各个字母的个数。因为每次只能变换 $k$ 个相同的字母,那么需要变换的每个字母个数都一定要是 $k$ 的整数倍。还要注意判断是否可以变成更大的字母,即从小到大统计字母个数和然后比较即可,若字符串 $a$ 当前字母及之前的字母的个数比 $b$ 中的要大,则需要变成更小的字母,不合法。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    using namespace std;
    int T,n,k,suma,sumb;
    int cnta[30],cntb[30];
    string a,b;
    bool pd;
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&k);cin>>a>>b;
            for(int i=0;i<26;i++)
                cnta[i]=cntb[i]=0;pd=suma=sumb=0;//初始化
            for(int i=0;i<n;i++)
                cnta[a[i]-'a']++,cntb[b[i]-'a']++;//统计每个字母的个数
            for(int i=0;i<26 && !pd;i++)
                pd=(abs(cnta[i]-cntb[i])%k>0)||((suma=suma+cnta[i])<(sumb=sumb+cntb[i]));//不能被 k 整除或需要变得更小则不合法
            puts(pd?"No":"Yes");
        }
        return 0;
    }
  • 相关阅读:
    数据库迁移到Amazon RDS 的问题
    排序算法之希尔排序
    第一个 Shell脚本
    排序算法之直接插入排序
    当前工作参考
    cerr
    阿里云典型应用案例
    云服务引擎ACE
    阿里云SLB
    指针使用注意事项
  • 原文地址:https://www.cnblogs.com/TEoS/p/14027537.html
Copyright © 2020-2023  润新知