• E


    题目链接:http://codeforces.com/gym/101981/attachments

    题目大意:输入两个串 问你第一个串能不能转化为第二个串,翻转次数无限制,但是每次只能翻转K个连续相同的字母

    思路:找到两个串中连续的相等的K个字符,可以把他们提到串的最前面(也可以全部消掉,因为不管位置在哪,都可以通过翻转移位到同一个位置),

    全变为0(1也可以) 最后判断剩下的是否相等

    看代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<cstdlib>
    #include<stack>
    using namespace std;
    typedef long long LL;
    const LL mod=1e9+7;
    const LL INF=1e9+7;
    const int maxn=1e6+50;
    int a[maxn],sum[maxn];
    string solve(string s,int k)
    {
        string res="";
        stack<char> s1;
        stack<int> num;
        int len=s.size();
        for(int i=0;i<len;i++)
        {
            if(s1.empty()||s1.top()!=s[i])//为空或者最后一个不相等
            {
                s1.push(s[i]);
                num.push(1);
            }
            else//相等
            {
                int temp=num.top();
                num.pop();
                num.push(temp+1);
            }
            if(num.top()==k)//有连续的k个
            {
                num.pop();
                s1.pop();
            }
        }
        while(!s1.empty())
        {
            char c=s1.top();
            s1.pop();
            int p=num.top();
            num.pop();
            for(int i=1;i<=p;i++) res+=c;
        }
        return res;
    }
    int main()
    {
        int N,K;scanf("%d%d",&N,&K);
        int flag=0;
        string s,t;
        cin>>s>>t;
        string s1=solve(s,K);
        string s2=solve(t,K);
        if(s1==s2) printf("Yes
    ");
        else printf("No
    ");
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    bat windows批处理 移动所有子目录文件
    Oracle常见的QA
    [转载]行动起来
    [转载]微笑
    Excel数据更新至Mysql数据库
    sql server QA
    关于SharpZipLib的压缩与解压问题
    整合Spring.net到asp.net网站开发中初探
    设计模式概要
    Oracle 常用语句档案(二)
  • 原文地址:https://www.cnblogs.com/caijiaming/p/11704000.html
Copyright © 2020-2023  润新知