将板凳0与小朋友1任意排列,每个小朋友可以坐离其距离范围为k的任意一个板凳,每个人只能坐一个板凳,有多少个小朋友能坐到板凳?
如下输入输出:
input '101100',k=2
output :3
贪心算法:查找当前小朋友前后k个位置的板凳,存在空闲板凳占用即可。
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std ;
int main()
{
vector<char> str_ck;
vector<int> lable;
string s1;
char num;
int lab_chair = 0;
int lab_child = -1;
int k;
int len;
int ans = 0;
cin >> s1;
for (int p = 0; p < s1.length(); p++)
{
str_ck.push_back(s1[p]);
if(s1[p]=='1')
lable.push_back(lab_child);
else
lable.push_back(lab_chair);
}
cin >> k;
len = str_ck.size()-1;
for (int i = 0; i < str_ck.size(); i++)
{
if (str_ck[i]=='1')
{
for (int j = max(0,i-k); j <= min(len,i+k); j++)
{
if(str_ck[j]=='0'&&lable[j]==0)
{
ans++;
lable[j]=-1;
break;
}
}
}
}
cout<<ans<<endl;
return 0;
}