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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugarbliss/article/details/81534274

题目链接:http://codeforces.com/contest/1015/problem/B

题意:输入两个长为n的字符串s和t,问s经过多少次变换后(只能相邻交换,即i与i+1交换)可以变成t,且最后输出i的下标

思路:直接暴力模拟交换就行了

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n; cin >> n;
    string s, t, ss, tt;
    vector <int> v;
    cin >> s >> t;
    ss = s; tt = t;
    sort(ss.begin(),ss.end()); sort(tt.begin(),tt.end());
    if(ss != tt) {puts("-1"); return 0;}
    for(int i = 0; i < n; i++)
    {
        if(s[i] != t[i])
        {
            int j = i + 1;
            while(s[j] != t[i]) j++;
            while(--j >= i) {v.push_back(j+1); swap(s[j],s[j+1]);}
        }
    }
    printf("%d\n",v.size());
    for(auto i: v) printf("%d ",i);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sugarbliss/article/details/81534274