zoukankan      html  css  js  c++  java
  • cf div3 B Obtaining the String

    先贴上我的wa代码,至今仍未找到bughttps://paste.ubuntu.com/p/K3FWdQmQ9m/

      我的思路就是冒泡排序,最多冒n-1次。

      后来看来大佬的做法,也是冒泡排序,不过,是给s串里每一个字符都赋予了一个值,这个值是依照t串赋予的,比如说我们遍历到了t串的i位置的字符,那么t串里i位置的字符对应的值为i,然后s串里和t[i]相等且未被赋予值的字符赋予和t[i]一样的值即i。那么最后

    得到了一个t串对应的序列,从1到n是升序的,还得到了一个s串对应的序列,是无序的,对其冒泡排序即可

    #include<bits/stdc++.h>
    using namespace std;
    char st[55],et[55];
    int cnt1[26],cnt2[26];
    int stn[55],etn[55],n;
    int main()
    {
        queue<int>ans;
        while(!ans.empty()) ans.pop();
        cin>>n>>st+1>>et+1;
        int flag=1;
        for(int i=1;i<=n;i++)
        {
            if(flag&&st[i]!=et[i]) flag=0;
            cnt1[st[i]-'a']++;
            cnt2[et[i]-'a']++;
        }
        if(flag)
        {
            cout<<0<<endl;
            return 0;
        }
        for(int i=0;i<=25;i++)
        {
            if(cnt1[i]!=cnt2[i])
            {
                cout<<-1<<endl;
                return 0;
            }
        }
        for(int i=1;i<=n;i++)
        {
            etn[i]=i;
            for(int j=1;j<=n;j++)
            {
                if(et[i]==st[j]&&!stn[j])
                {
                    stn[j]=i;
                    break;
                }
            }
        }
        for(int i=0;i<n-1;i++)
            for(int j=1;j<n-i;j++)
            {
                if(stn[j]>stn[j+1])
                {
                    swap(stn[j],stn[j+1]);
                    ans.push(j);
                }
    
            }
        cout<<ans.size()<<endl;
        while(!ans.empty())
        {
            cout<<ans.front()<<" ";
            ans.pop();
        }
        return 0;
    }
    
  • 相关阅读:
    EF Core 打印日志
    生成各种开源挂件的网址
    .NET Core 原生 Aop,不依赖任何第三方
    .NET Core + Castle.DynamicProxy 拦截
    EF Core 审计日志
    Gitee 接口大全
    VS 批量新增文件头
    Linq 完全指南
    swagger转word
    大型网站架构
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755029.html
Copyright © 2011-2022 走看看