题解:AT_abc421_c [ABC421C] Alternated
题目: [ABC421C]Alternated
题目链接:https://www.luogu.com.cn/problem/AT_abc421_c
题目翻译:
给你一个长度为2n的字符串,里面有A,B若干个,对这个字符串进行任意次数的相邻字符交换,求字符串中不存在相同字符相邻的情况所需的最少操作次数。
这道题很简单,我们先考虑考虑,答案无非就两种, 一种是ABABABAB... 一种事ABABABA... 然后我们分开讨论一下就可以写出代码啦!
#include <bits/stdc++.h>
using namespace std;
int n,c1,c2;
string s;
int a[510000],b[510000];
long long k1 = 0,k2 = 0;
int main()
{
cin >> n >> s;
for(int i = 0;i < 2 * n;i++)
{
if(s[i] == 'A') a[c1++] = i;
else b[c2++] = i;
}
for(int i = 0;i < n;i++) k1 += abs(a[i] - 2 * i); //ABABABAB...
for(int i = 0;i < n;i++) k2 += abs(b[i] - 2 * i); //BABABABA...
cout << min(k1,k2);
}
这是我的第一篇题解,希望管理大大能通过~