#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. 篮球和排球都至少采购 1 个。
  2. 经费用完,即总花费恰好等于 n 元。
  3. 篮球和排球的总数要超过 50 个。

请找出所有可行的采购方案,并按照篮球数量从少到多,排球数量从多到少的顺序输出。


输入格式

输入包含三个整数,n、x、y,分别代表:

  • 总经费 n (1n1051 \leq n \leq 10^5)
  • 篮球单价 x (1x10001 \leq x \leq 1000)
  • 排球单价 y (1y10001 \leq y \leq 1000)

三者之间用空格隔开。


输出格式

输出所有可行的采购方案。 每个方案由两个整数组成,分别表示篮球的采购个数和排球的采购个数。 每个方案占一行,按照篮球数量从少到多,排球数量从多到少的顺序输出。

如果没有可行方案,则输出 -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 = n
  • a + b > 50
  • a, b \geq 1

思路:

  1. 枚举 a,计算 b = (n - a * x) / y
  2. 判断 b 是否为正整数,且 a + b > 50
  3. 记录所有符合条件的 (a, b)
  4. 按照 a 递增、b 递减的顺序输出。

优化:

  • a 的上限可以通过 n/x 计算得出,减少遍历范围。
  • b 计算后需确保其为整数,即 (n - a * x) % y == 0

时间复杂度分析

  • a 最多遍历 n/x 次,b 直接计算。
  • 最坏情况下 n = 100000x = 1a 需要遍历 100000 次。
  • 由于 b 通过公式计算,不需要额外循环,因此时间复杂度约为 O(N/x),可接受。

结论

该问题考察基本的数学计算和枚举方法,适合作为整数方程求解的练习题目。