Codeforces Round #501 (Div. 3) B. Obtaining the String
阿新 • • 發佈:2018-12-21
題意:兩個字串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; }