
一起动脑筋 · 先看一个小故事
女孩看到题目“至少选两个”,机器人却只选了一个。计算过程可能没错,但任务读错了。
把过程摊开来看
- 找输入题目给什么
- 找输出到底要回答什么
- 圈条件至少、至多、不同
- 手算样例确认理解
读题先把要求翻译成自己的话。
尤其注意数量边界、是否允许重复,以及输出的是值、个数还是位置。能手算一个小例子,才说明规则开始清楚。
01题目故事和真正任务一样吗?
很多信奥题会讲故事,但算法真正处理的是故事背后的数据关系和规则。
例如“同学排队买票”,可能真正的问题只是:给定若干到达时间,计算处理顺序。
02读题时要圈出哪些信息?
输入格式
有几行?每个数代表什么?
输出格式
输出几个值?格式是什么?
约束
n、数值范围、时间限制。
特殊规则
相等时怎么办?能否重复?
03“最多”“至少”“恰好”有什么区别?
这些词会直接改变问题。
至少 3 个
3、4、5……都可以。
恰好 3 个
只能是 3 个。
读题时要特别注意数量关系词。
04样例能证明什么?
样例只能帮助说明规则,并证明你的程序对这些样例输出正确。
05数据范围为什么也是题意的一部分?
例如 n ≤ 20 和 n ≤ 200000,可能需要完全不同的算法。
所以数据范围不是“最后再看”的附加信息,而是帮助你理解题目应该怎样解决的重要线索。
06怎样检查自己真的读懂了?
试着回答:
- 给我什么?
- 我要输出什么?
- 什么情况算合法?
- 什么情况算最优或正确?
- 最大数据有多大?
你已经知道了什么
- 要把题目背景和真正计算任务分开。
- 输入、输出、约束和特殊规则都属于题意。
- 关键词会改变问题定义。
- 样例只是示例,不是完整测试。
- 数据范围常常暗示可行算法。
下一篇:怎样把现实问题变成数据?
轮到你来试一试
题目要输出最大值的位置,程序只输出最大值,算正确吗?
想好了吗?点开看解释
不算,回答了不同的问题。要记录并输出题目规定的位置,还需看位置从 0 还是 1 编号。