题目大意
一个由“*”和“.”组成的字符串,求移动多少次“*”才可以使所有“*”连在一起
思路
找出最中间的那只羊,让其他羊向中看齐。
AC代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+7;
char a;
int w[N];
int main(){
int t; cin>>t;
while(t--){
int n; cin>>n;
int cnt=0;
for(int i=1;i<=n;i++){
cin>>a;
if(a =='*') w[++cnt]=i;
}
if(cnt<=1){cout<<0<<'\n';continue;}
int mid=(cnt+1)/2;
ll num=0,res=0;
for(int i=mid-1;i>=1;i--)
res+=(w[mid]-w[i]-1-num++);
num=0;
for(int i=mid+1;i<=cnt;i++)
res+=(w[i]-w[mid]-1-num++);
cout<<res<<'\n';
}
}