0
点赞
收藏
分享

微信扫一扫

东华OJ:完美的代价

肉肉七七 2022-04-05 阅读 87

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int N;
	scanf("%d",&N);
	string s;
	cin >> s;
	int last = N - 1;//下面多次用到N-1
	int step = 0;
	bool flag =false;
	//for (int i = 0; i < N; i++)
	//上面的也行,不过用i < last时,整体上能减少计算机的运算量
	for (int i = 0; i < last; i++)
	{
		for (int j = last; j >= i; j--)
		{
			if (i == j)
			{
				if (N % 2 == 0 || flag == true)
				{//有两种情况:1,N为偶数,但其中有不能配对的,此时i和j指在同一个位置上
			//	2 N为奇数,有两个以及以上不能配对的,此时i和j指在同一个位置上
					cout << "Impossible";
					return 0;
				}
				flag =true;
				step += N / 2 - i;//这里加的值表示当前的数到中间位置所需要移动的步数
			}
			else if (s[i] == s[j])//这里针对的是i != j下的计步
			{
				for (int k = j; k < last; k++)
				{
					swap(s[k], s[k + 1]);//把k位置的字符换到last位置上去     这里是k+1,故而 k < last不是 k < last+1
					step++;
				}
				last--;
				break;
			}
		}
	}
	cout << step;
	return 0;
}

 

举报

相关推荐

0 条评论