【题解】糖果分配
糖果分配
http://www.nowcoder.com/questionTerminal/c0e676f4cf9846c785ade34d9472951b
题目描述
假设你是一位很有爱的幼儿园老师,想要给幼儿园的小朋友们一些小糖果。但是,每个孩子最多只能给一块糖果。对每个孩子 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; }