题目描述
假设你是一位很有爱的幼儿园老师,想要给幼儿园的小朋友们一些小糖果。但是,每个孩子最多只能给一块糖果。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的糖果的最小尺寸;并且每块糖果 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个糖果 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
注意:
你可以假设胃口值为正。
一个小朋友最多只能拥有一块糖果。
输入描述
第一行输入每个孩子的胃口值
第二行输入每个糖果的尺寸
孩子数和糖果数不超过1000
输出描述
能满足孩子数量的最大值
示例1
输入
1 2 3
1 1
输出
1
需要尽可能多地满足越多数量的孩子,所以优先满足胃口小的孩子就好,将糖果尺寸和孩子的胃口值都从小到大排序,依次判断每一颗糖果能不能分配给当前胃口值最小的孩子就好。如果可以分配,那么ans++,并且更新当前胃口值最小的孩子。
#include<iostream>
#include<sstream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
string s;
getline(cin,s);
stringstream ss1(s);
int num;
vector<int> G;
while(ss1>>num)
{
G.push_back(num);
}
getline(cin,s);
stringstream ss2(s);
vector<int> S;
while(ss2>>num)
{
S.push_back(num);
}
sort(G.begin(),G.end());
sort(S.begin(),S.end());
int j = 0;
int ans = 0;
for(int i = 0 ; i < S.size(); i++)
{
if(S[i] >= G[j])
{
ans++;
j++;//更新当前胃口值最小的孩子。
}
if(j>= G.size())
{
break;
}
}
cout<<ans<<endl;
return 0;
}
京公网安备 11010502036488号