网站语言版本,质感设计网站,建材行业网站建设,永州微网站建设题目#xff1a;#xff08;卡牌#xff09;
题目描述#xff08;13届 CC B组C题#xff09; 解题思路#xff1a; 题目分析#xff1a; 有 n 种卡牌#xff0c;每种卡牌的现有数量为 a[i]#xff0c;所需的最大数量为 b[i]#xff0c;还有 m 张空白卡牌。 每…题目卡牌
题目描述13届 CC B组C题 解题思路 题目分析 有 n 种卡牌每种卡牌的现有数量为 a[i]所需的最大数量为 b[i]还有 m 张空白卡牌。 每次组装一套卡牌需要满足每种卡牌各一张的需求若某种卡牌不足可以用空白卡牌替代。 核心逻辑 模拟构建套组的过程 优先使用 a[i] 中已有的卡牌 若 a[i] 不足尝试使用空白卡牌 m 补充 若既没有足够的 a[i]也没有空白卡牌 m 时停止构建套组。 模拟过程 使用一个循环依次检查每种卡牌的需求。 若当前可以满足所有需求则增加已组装的套组数 r否则结束循环。
代码实现C语言
#include math.h
#include stdio.h
#include stdlib.h
int a[200005];
int b[200005];
int main()
{int n, i, r 0, f 1;long long int m;scanf(%d%d, n, m);for (i 0; i n; i){scanf(%d, a[i]);}for (i 0; i n; i){scanf(%d, b[i]);}while (f){for (i 0; i n; i){if (a[i]){a[i]--;}else if (b[i] 0 m 0){b[i]--;m--;}else{f 0;break;}}if (f){r;}}printf(%d, r);
}
得到运行结果 代码分析 输入处理 读取 n卡牌种类数和 m空白卡牌数。 读取两组数组 a现有卡牌数量和 b每类卡牌最大需求。 模拟过程 在每次循环中逐一检查每种卡牌 若 a[i] 0使用一张已有卡牌 若 a[i] 0 且 m 0用一张空白卡牌补充 若两者都无法满足结束循环。 每成功完成一轮增加套组数 r。 终止条件 任意一种卡牌的需求无法满足或空白卡牌数不足时停止构建。 复杂度分析 时间复杂度O(k * n)其中 k 是可以组装的最大套组数n 是卡牌种类数。 空间复杂度O(n)用于存储数组 a 和 b。
难度分析
⭐️⭐️⭐️ 总结
本题的解法是基于模拟的方法逐步验证每套卡牌是否能完成。在实现中逐一扣减卡牌需求并动态更新空白卡牌的使用情况最终统计完成的套组数。这种方式清晰且直观非常适合解决需要严格满足条件的资源分配问题。