链接:
https://codeforces.com/problemset/problem/1520/E
题意:
给一个字符串,'*'代表羊,'.'代表空,让所有的羊站成一排,意为每个羊中间都没有空,每次只能让一只羊动一步,问最少多少步可以让所有的羊站成一排。
本题只要记录所有羊的位置,然后所有羊都向中间的羊靠拢即可,如果有偶数只羊,那选两只羊的哪一只都可以。
代码如下:
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
#include<string>
#include<string.h>
#include<random>
using namespace std;
typedef long long ll;
int position[1000003];
int main() {int T;cin >> T;while (T--) {int n;cin >> n;string s;cin >> s;int cntshp = 0;for (int i = 0; i < n; i++) {if (s[i] == '*') {position[cntshp++] = i;}}int center = (cntshp >> 1);ll ans = 0;for (int i = 0; i < cntshp; i++) {if (i == center) {continue;}else {ans += (abs(position[center] - position[i]) - abs(center - i));}}cout << ans;cout << endl;}
}