题目:
#include<bits/stdc++.h>
using namespace std;
const int N = 8000;
char a[N];
int main()
{
int n; cin >> n;
cin >> a;
int sum = 0;//计数,移动的步数
int j = n - 1;
int flat = 0;
for (int i = 0; i <= j; i++)//这里不能用for(int i=0;i<n;i++),因为每次匹配好一次,后面j--,数组后面无需再匹配
{
int t=j;//这个需要放在里面
while (a[i] != a[t])//找相同字符
t--;
if (i == t)//相同字符为自己,说明只有一个
{
flat++;
if (n % 2 == 0 || flat > 1)//数组为偶,不能有一个单字符,1个以上单子符也无法匹配
{
cout << "Impossible" << endl;
return 0;
}
sum += n / 2 - i;//只有一个相同字符,把这个字符移到中间,移动的步数为n/2-i
continue;
}
else
{
sum += j - t;
char item = a[t];//关键
for (int k = t; k < j; k++)//每次移动一次需要把移动的数组改变
a[k] = a[k + 1];
a[j] = item;
j--;
}
}
cout << sum << endl;
return 0;
}
点个赞再走呗