Arranging The Sheep

题目大意:移动羊使得羊在一起,输出最少的移动次数
思路:贪心选定中间的羊,让两边的羊向中间靠拢。
代码实现:
向量v中存储的是从最左边到该羊之间存在多少空格。所以相减得到的是两只羊之间存在的空格数量。两只羊u,v之间的某只羊移动并不会改变两只羊u,v之间的空格。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    int _;
    scanf("%d",&_);
    while(_--){
        int n,cur=0;
        string s;
        vector<int> v;
        cin>>n;
        cin>>s;
        for(auto i:s){
            if(i=='.') ++cur;
            else v.push_back(cur);
        }
        if(v.empty()){
            cout<<'0'<<endl;
            continue;
        }
        int m=v[v.size()/2];
        ll ans = 0;
        for(auto k:v){
            cout<<k<<" ";
            ans += abs(k-m);
        }
        cout<<endl<<ans<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值