当前位置: 代码迷 >> 综合 >> codeforces 1520E Arranging The Sheep
  详细解决方案

codeforces 1520E Arranging The Sheep

热度:6   发布时间:2023-12-02 23:15:13.0

链接:
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;}
}