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;
    }
    
  • 相关阅读:
    优雅地从Python入门到入土*序与目录
    【NOI2008】假面舞会
    【HNOI2009】梦幻布丁
    【题解】前k大子段和
    【NOIP2017】宝藏
    【NOIP2014】飞扬的小鸟
    【NOIP2014】解方程
    【NOIP2012】开车旅行
    【模板】线性同余方程组
    java实现省市区三级联动
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755030.html
Copyright © 2011-2022 走看看