2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第2题)

2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第2题)

第2题
cpp 复制代码
1  #include <iostream>
2  #include <cstdlib>
3  using namespace std;
4   
5  int n;
6  int d[10000];
7   
8  int find(int L, int R, int k) {
9      int x = rand() % (R - L + 1) + L;
10      swap(d[L], d[x]);
11      int a = L + 1, b = R;
12      while (a < b) {
13          while (a < b && d[a] < d[L])
14              ++a;
15          while (a < b && d[b] >= d[L])
16             --b;
17          swap(d[a], d[b]);
18      }
19      if (d[a] < d[L])
20          ++a;
21      if (a - L == k)
22          return d[L];
23      if (a - L < k)
24          return find(a, R, k - (a - L));
25      return find(L + 1, a - 1, k);
26  }
27   
28  int main() {
29      int k;
30      cin >> n;
31      cin >> k;
32      for (int i = 0; i < n; ++i)
33          cin >> d[i];
34      cout << find(0, n - 1, k);
35      return 0;
36  }              

假设输入的 n,k 和 di都是不超过 10000的正整数,且 k不超过 n,并假设 rand() 函数产生的是均匀的随机数,完成下面的判断题和单选题:

  • 判断题

    1. 第 9行的 x 的数值范围是 L+1 到 R,即 L+1,R。( )

      A. 正确 B. 错误

    2. 将第 19 行的 d[a] 改为 d[b],程序不会发生运行错误。( )

      A. 正确 B. 错误

  • 单选题

    1. (2.5 分)当输入的 di是严格单调递增 序列时,第 17 行的 swap 平均执行次数是( )。

      A. O(nlog⁡n)

      B. O(n)

      C. O(log⁡n)

      D. O( n 2 n^2 n2)

    2. (2.5 分)当输入的 di 是严格单调递减 序列时,第 17 行的 swap 平均执行次数是( )。

      A. O( n 2 n^2 n2)

      B. O(n)

      C. O(nlog⁡n)

      D. O(log⁡n)

    3. (2.5 分)若输入的 di 为 i,此程序①平均的时间复杂度和②最坏情况下的时间复杂度分别是( )。

      A. O(n) , O( n 2 n^2 n2)

      B. O(n) , O(nlog⁡n)

      C. O(nlog⁡n) , O( n 2 n^2 n2)

      D. O(nlog⁡n) , O(nlog⁡n)

    4. (2.5 分)若输入的 di 都为同一个数,此程序平均的时间复杂度是( )。

      A. O(n)

      B. O(log⁡n)

      C. O(nlog⁡n)

      D. O( n 2 n^2 n2)

判断题答案及解析
  1. 错误 。第9行的x = rand() % (R - L + 1) + L,随机数范围是[L, R],包括L,而不是[L+1, R]。
  2. 正确 。原程序在区间长度为1时,a = L+1会越界访问;改为d[b]后,b = R = L在合法范围内,避免了运行错误。
单选题答案及解析
  1. A/B。错题,不随便算一个答案。
  2. B。对于严格单调递减序列,同理,平均交换次数也为O(n)。
  3. A 。输入为i(递增序列)时,平均时间复杂度为O(n),最坏情况(每次选到最小或最大)为O(n²)。
  4. D。输入全相同时,每次划分只能排除一个元素,递归深度为n,总比较次数为O(n²)。

专栏推荐:信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html


各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
sm_926787057 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
by209998 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
colinu8 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++
wuminyu9 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
longlongzihan9 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
liulilittle9 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
无忧.芙桃10 小时前
C++语言原理与实践(十二):list类的底层实现
c++·windows·list
沫璃染墨10 小时前
《Linux工程实践篇(二):线程池实战——从线程安全单例到完整源码实现》
linux·开发语言·c++·单例模式·设计模式·系统架构
有只小白叫岳飒10 小时前
c++智能指针 unique_ptr与函数调用
c++
Leo.yuan10 小时前
Kafka+Flink拼凑,还是FineDataLink 5.0一体化?实时数据处理的两种思路
c++·mfc