时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:3655

本题知识点: Java工程师 C++工程师 招商银行信用卡中心 贪心 排序

 算法知识视频讲解

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

题目描述

假设你是一位很有爱的幼儿园老师,想要给幼儿园的小朋友们一些小糖果。但是,每个孩子最多只能给一块糖果。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的糖果的最小尺寸;并且每块糖果 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个糖果 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

注意:
你可以假设胃口值为正。
一个小朋友最多只能拥有一块糖果。
 

输入描述:

第一行输入每个孩子的胃口值

第二行输入每个糖果的尺寸

孩子数和糖果数不超过1000

输出描述:

能满足孩子数量的最大值

示例1

输入

复制

1 2 3
1 1

输出

复制

1

代码:

#include<bits/stdc++.h>
using namespace std;
int a[1010],b[1010],n,vis[1010];
int main()
{
    int j=0,k=0;
    while(cin>>n)
    {
        a[j++]=n;
        if(getchar()=='\n')break;
    }
    while(cin>>n)
    {
        b[k++]=n;
        if(getchar()=='\n')break;
    }
    memset(vis,0,sizeof(vis));
    sort(a,a+j);
    sort(b,b+k);
    int flag=0;
    for(int i=0; i<k; i++)
    {
        for(int k1=j-1;k1>=0;k1--)
        {
           if(b[i]>=a[k1]&&vis[k1]==0){
            flag++;
            vis[k1]=1;
            break;
           }
        }
    }
    cout<<flag<<endl;
    return 0;
}