#1978. 开学大采购
开学大采购
Problem Title: Back-to-School Sports Equipment Purchase / 开学大采购
任务总览表
| 任务名称 | 开学大采购 |
|---|---|
| 时间限制 (Time Limit) | 1 秒 (1 second) |
| 内存限制 (Memory Limit) | 256 MB |
| 分数 (Score) | 100 分 (100 points) |
题目描述
新学期开始了,学校计划采购一批新的篮球和排球用来上体育课。学校共有 n 元经费,咨询体育用品店得知篮球 x 元/个,排球 y 元/个。
现要求满足以下条件:
- 篮球和排球都至少采购 1 个。
- 经费用完,即总花费恰好等于 n 元。
- 篮球和排球的总数要超过 50 个。
请找出所有可行的采购方案,并按照篮球数量从少到多,排球数量从多到少的顺序输出。
输入格式
输入包含三个整数,n、x、y,分别代表:
- 总经费 n ()
- 篮球单价 x ()
- 排球单价 y ()
三者之间用空格隔开。
输出格式
输出所有可行的采购方案。 每个方案由两个整数组成,分别表示篮球的采购个数和排球的采购个数。 每个方案占一行,按照篮球数量从少到多,排球数量从多到少的顺序输出。
如果没有可行方案,则输出 -1。
样例输入
1000 25 15
样例输出
1 65
4 60
7 55
10 50
13 45
16 40
19 35
22 30
25 25
提示
- 需要找到所有满足
(a * x + b * y = n)且(a + b > 50)的整数对(a, b)。 - 结果按照
a递增、b递减的顺序输出。 - 如果不存在满足条件的
(a, b),则输出-1。
题目分析
目标: 寻找所有 (a, b) 使得:
a * x + b * y = na + b > 50a, b \geq 1
思路:
- 枚举
a,计算b = (n - a * x) / y。 - 判断
b是否为正整数,且a + b > 50。 - 记录所有符合条件的
(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),可接受。
结论
该问题考察基本的数学计算和枚举方法,适合作为整数方程求解的练习题目。