【题目】http://codeforces.com/contest/1015/problem/B
【大意】给两个字符串,操作是交换相邻两个字符,问a串经过多少次怎样的操作后,能成为b串。输出的第二行是每次交换的[i,i+1]的i。
【代码】
#include<bits/stdc++.h>
using namespace std;
vector<int>v;
int main()
{
int n;
cin>>n;
string a,b;
cin>>a>>b;
int book[300]={0};
for(int i=0;i<n;i++)
{
book[a[i]]++;
book[b[i]]--;
}
for(int i=0;i<300;i++)
{
if(book[i]!=0){printf("-1\n");return 0;}
}
int cnt=0;
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
if(b[i]==a[j])
{
// cout<<a<<" "<<b<<endl;
for(int k=j;k>i;k--)
{
swap(a[k],a[k-1]);
cnt++;
v.push_back(k-1+1);
//printf("%d ",k-1+1);
// printf("%d %d\n",i,j);
}
break;
}
}
// printf("\n");
}
printf("%d\n",cnt);
for(int i=0;i<v.size();i++)printf("%d ",v[i]);
}