欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF227B.Effective Approach
Effective Approach
题目描述
在一次团队训练中,Vasya、Petya 和 Sasha 遇到了一道关于实现数组线性查找的问题。
按照男孩们的说法,线性查找的工作方式如下。按某个预先选择的顺序,依次将数组元素与要查找的数字进行比较。一旦找到了与所需数相等的数组元素,查找就结束。算法的效率取决于进行了多少次比较。比较次数越少,线性查找的效率就越高。
Vasya 认为,如果线性查找从第 个元素开始,按顺序遍历元素直到第 个元素,效果会更好(本题中数组下标从 到 )。而 Petya 却说 Vasya 错了:如果线性查找从第 个元素开始,按顺序遍历到第 个元素,所需的比较次数会更少。Sasha 则认为这两种方法其实是等价的。
为了结束争论并开始题目,队友们决定在一个例子上比较这两种方法。为此,他们取了一个 到 的排列作为数组,并生成了 个查询,每个查询为:在数组中查找值为 的元素。他们想计算出,对于两种方法,线性查找处理所有查询所需的总比较次数。如果第一种方法比较次数更少,则 Vasya 赢;如果第二种方法更少,则 Petya 赢;如果两种方法需要的比较次数相同,则 Sasha 赢。
问题在于,线性查找太慢了。如果不用你的帮助,男孩们在训练结束前都搞不清谁是对的。请帮助他们判断谁能赢得争论。
输入格式
第一行包含整数 ,表示数组中的元素个数。第二行包含 个互不相同的用空格分隔的整数 ,表示数组的元素。
第三行包含整数 ,表示查询个数。最后一行包含 个用空格分隔的整数 ,表示查询。注意,查询可以重复。
输出格式
输出两个整数,分别表示 Vasya 方案和 Petya 方案需要的总比较次数,中间用空格隔开。
请不要在 C++ 中用 %lld 格式读写 64 位整数。推荐使用 cin、cout 流或 %I64d 格式。
说明/提示
在第一个样例中,Vasya 的方案只需要一次比较(从第 个元素开始,立刻找到目标),而 Petya 的方案需要两次比较(先与第 个元素比较,没有找到,再与第 个元素比较)。
在第二个样例中,Vasya 的方案需要两次比较(先比较第 个元素,再比较第 个元素),而 Petya 的方案第一次比较第 个元素就找到了目标,只需一次比较。
由 ChatGPT 5 翻译
样例
2
1 2
1
1
1 2
2
2 1
1
1
2 1
3
3 1 2
3
1 2 3
6 6
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |