1. 程式人生 > >Codeforces Round #501 (Div. 3) B. Obtaining the String

Codeforces Round #501 (Div. 3) B. Obtaining the String

題意:兩個字串a和b,a變成b的字母變換規則為只能交換ai和ai+1,最少交換字數變成b,輸出每次交換的座標位置

思路:類似氣泡排序,在找到一個ab不相同的字元時從當前位置開始交換,直到此處字元相同

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <cstdio> 
#include <vector>
using namespace std; 
#define ll long long
 
int main()
{
        vector<int >v;
        int n,i,j,k,s[150]={0};
        string a,b;
        cin>>n;
        cin>>a>>b;
        for(i=0;i<n;i++) 
        {
                s[a[i]]++;
                s[b[i]]--;
        }
        for(i=0;i<150;i++)
        {
                if(s[i]!=0)
                {
                        cout<<"-1"<<endl;
                        return 0;
                }
        }
        for(i=0;i<n;i++)
        {
                for(j=i;i<n;j++)
                {
                        if(b[i]==a[j])
                        {
                                for(k=j;k>i;k--)
                                {
                                        swap(a[k],a[k-1]); 
                                        v.push_back(k);
                                }
                                break;
                        }
                }
        }
        cout<<v.size()<<endl;
        for(i=0;i<v.size();i++)
                cout<<v[i]<<" ";
        return 0;
}