题目描述

假设你是一位很有爱的幼儿园老师,想要给幼儿园的小朋友们一些小糖果。但是,每个孩子最多只能给一块糖果。对每个孩子 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;
}