本文主要是介绍Codeforces Round #501 (Div. 3) B. Obtaining the String(模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接: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;
}
这篇关于Codeforces Round #501 (Div. 3) B. Obtaining the String(模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!