测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A18789. 分饼干

填空题 较难

题目描述

分饼干

题目描述

有n个小朋友,每个小朋友有一个胃口值g[i];有m块饼干,每块饼干有尺寸s[i]。

一块饼干只能分给一个小朋友,当且仅当饼干尺寸≥小朋友胃口时,小朋友能被满足。

求最多能满足多少个小朋友。

输入格式

第一行两个整数n,m;第二行n个整数表示数组g;第三行m个整数表示数组s。

输出格式

输出一个整数,表示最多满足的小朋友数量。

数据范围: 1≤n,m≤1000

参考答案

#include <iostream> #include <algorithm> using namespace std; int g[1005], s[1005]; int main() { int n, m; cin >> n >> m; for(int i = 0; i < n; i++) cin >> g[i]; for(int i = 0; i < m; i++) cin >> s[i]; sort(g, g + n); // 小朋友胃口升序 sort(s, s + m); // 饼干尺寸升序 int i = 0, j = 0, ans = 0; while(i < n && j < m) { if(s[j] >= g[i]) // 当前饼干可以满足小朋友 { ans++; i++; j++; } else j++; // 饼干太小,换下一块 } cout << ans; return 0; }

答案解析

1. 贪心规则:用最小能满足当前小朋友的饼干分配,保留大饼干给胃口大的小朋友,避免浪费;

2. 前置操作:将胃口数组、饼干数组全部升序排序;

3. 双指针遍历:饼干够胃口则同时后移、答案+1,否则仅饼干指针后移(饼干太小丢弃);

4. 算法类型:静态排序贪心,无需堆,时间复杂度O(nlogn+mlogm)。

评分细则

正确输入输出(4分)、双数组排序正确(5分)、双指针逻辑正确(5分)、代码无bug(1分)

上一题 下一题