【Codeforces】1015B Obtaining the String(字符串 交换)

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

http://codeforces.com/contest/1015/problem/B
n 表示 字符串的长度

然后是两个字符串,每一次只能交换相邻的两个,如果选择第i个字符的话,只能交换第i个和第i+1个

然后输出每一次交换选定的位置

暴力,模拟,queue(数组也可以)

#include <iostream>
#include <string>
#include <algorithm>
#include <queue>

using namespace std;

int main ()
{
	queue<int> q;
	int n,i,j,k;
	string s1,s2;
	cin >> n >> s1 >> s2;
	string ans1=s1,ans2=s2;
	sort(ans1.begin(),ans1.end());
	sort(ans2.begin(),ans2.end());
	if(ans1!=ans2)
	{
		cout << "-1";
		return 0;
	}
	for(i=0;i<n;i++)
	{
		if(s1[i]!=s2[i])
		{
			for(j=i;j<n;j++)
			{
				if(s1[j]==s2[i])
				{
					for(k=j-1;k>=i;k--)
					{
						q.push(k+1);
						char str=s1[k];
						s1[k]=s1[k+1];
						s1[k+1]=str;
					}
					break;
				}
			}
		}
	}
	int flag = 0;
	cout << q.size() << endl;
	while(q.empty()!=1)
	{
		if(flag++)
			cout << " ";
		cout << q.front();
		q.pop();
	} 
	return 0;
} 

http://codeforces.com/problemset/problem/53/D有点类似

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/88072241