#1979. 恐龙园买玩具

恐龙园买玩具

Problem Title: Buying Dinosaur Toys / 恐龙园买玩具


任务总览表

任务名称 恐龙园买玩具
时间限制 (Time Limit) 1 秒 (1 second)
内存限制 (Memory Limit) 256 MB
分数 (Score) 100 分 (100 points)

题目描述

小明暑假来到恐龙园游玩,在恐龙园的礼物店里,有一些形形色色的小恐龙玩偶。

小明想购买其中的霸王龙和三角龙玩偶送给自己的 5 位好朋友。

店员告诉小明:

  • 霸王龙玩偶的价格为 x 元/只。
  • 三角龙玩偶的价格为 y 元/只。

小明希望满足以下条件:

  1. 霸王龙和三角龙都至少购买 1 只。
  2. 霸王龙的数量必须大于等于三角龙的数量。
  3. 购买的总数至少为 5 只。
  4. 恰好用完 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 等于 n
  • a 大于等于 b
  • a 加 b 大于等于 5
  • a, b 大于等于 1

思路:

  1. 枚举 a,计算 b 等于 (n 减去 a 乘 x) 除以 y
  2. 判断 b 是否为正整数,且 a 大于等于 b,并满足 a 加 b 大于等于 5
  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),可接受。

结论

该问题考察整数方程求解与基本的循环枚举,适合作为数学与逻辑编程的练习题目。