题目大意:移动羊使得羊在一起,输出最少的移动次数
思路:贪心选定中间的羊,让两边的羊向中间靠拢。
代码实现:
向量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;
}
这篇博客介绍了如何运用贪心策略解决一个计算机科学中的问题:最小化移动羊使得羊群聚集的步骤数。文章通过读取输入的字符串,计算每只羊与中间羊的距离,并计算总移动次数。核心思想是选取中间羊为基准,让其他羊向其靠拢,从而达到最少移动次数。代码实现中,涉及到了字符串处理、向量操作和绝对值计算等编程概念。
267

被折叠的 条评论
为什么被折叠?



