http://codeforces.com/contest/1015/problem/B
题意:两个字符串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;
}