#1979. 恐龙园买玩具
恐龙园买玩具
Problem Title: Buying Dinosaur Toys / 恐龙园买玩具
任务总览表
| 任务名称 | 恐龙园买玩具 |
|---|---|
| 时间限制 (Time Limit) | 1 秒 (1 second) |
| 内存限制 (Memory Limit) | 256 MB |
| 分数 (Score) | 100 分 (100 points) |
题目描述
小明暑假来到恐龙园游玩,在恐龙园的礼物店里,有一些形形色色的小恐龙玩偶。
小明想购买其中的霸王龙和三角龙玩偶送给自己的 5 位好朋友。
店员告诉小明:
- 霸王龙玩偶的价格为 x 元/只。
- 三角龙玩偶的价格为 y 元/只。
小明希望满足以下条件:
- 霸王龙和三角龙都至少购买 1 只。
- 霸王龙的数量必须大于等于三角龙的数量。
- 购买的总数至少为 5 只。
- 恰好用完 n 元,不能有剩余。
请你编程帮助小明找出所有可能的购买方案,并按照以下顺序输出:
- 霸王龙的数量从少到多。
- 在霸王龙数量相同时,三角龙的数量从多到少。
输入格式
输入包含三个整数 n、x、y,分别代表:
- 总金额 n,范围 1 到 100000
- 霸王龙单价 x,范围 1 到 1000
- 三角龙单价 y,范围 1 到 1000
三者之间用空格隔开。
输出格式
输出所有满足条件的购买方案。 每个方案由两个整数组成,分别表示霸王龙的购买数量和三角龙的购买数量。 每个方案占一行,按照霸王龙数量从少到多,三角龙数量从多到少的顺序输出。
如果没有可行方案,则输出 -1。
样例输入
100 10 5
样例输出
7 6
8 4
9 2
提示
- 需要找到所有满足
(a 乘 x 加 b 乘 y 等于 n)且(a 大于等于 b)且(a 加 b 大于等于 5)的整数对(a, b)。 - 结果按照
a递增、b递减的顺序输出。 - 如果不存在满足条件的
(a, b),则输出-1。
题目分析
目标: 寻找所有 (a, b) 使得:
a 乘 x 加 b 乘 y 等于 na 大于等于 ba 加 b 大于等于 5a, b 大于等于 1
思路:
- 枚举
a,计算b 等于 (n 减去 a 乘 x) 除以 y。 - 判断
b是否为正整数,且a 大于等于 b,并满足a 加 b 大于等于 5。 - 记录所有符合条件的
(a, b)。 - 按照
a递增、b递减的顺序输出。
优化:
a的上限可以通过n 除以 x计算得出,减少遍历范围。b计算后需确保其为整数,即(n 减去 a 乘 x) 取模 y 等于 0。
时间复杂度分析
a最多遍历n 除以 x次,b直接计算。- 最坏情况下
n 等于 100000,x 等于 1,a需要遍历 100000 次。 - 由于
b通过公式计算,不需要额外循环,因此时间复杂度约为O(n 除以 x),可接受。
结论
该问题考察整数方程求解与基本的循环枚举,适合作为数学与逻辑编程的练习题目。