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

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

第3题
cpp 复制代码
#include <vector>
#include <algorithm>
#include <iostream>
 
using namespace std;
 
bool f0(vector<int> &a, int m, int k) {
    int s = 0;
    for (int i = 0, j = 0; i < a.size(); i++) {
        while (a[i] - a[j] > m) j++;
        s += i - j;
    }
    return s >= k;
}
 
int f(vector<int> &a, int k) {
    sort(a.begin(), a.end());
 
    int g = 0;
    int h = a.back() - a[0];
    while (g < h) {
        int m = g + (h - g) / 2;
        if (f0(a, m, k)) {
            h = m;
        }
        else {
            g = m + 1;
        }
    }
 
    return g;
}
 
int main() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n, 0);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    cout << f(a, k) << endl;
    return 0;
}

假设输入总是合法的且 1 ≤ a i ≤ 10 8 , n ≤ 10000 , 1 ≤ k ≤ n ( n − 1 ) / 2 1≤a_i≤10^8,n≤10000,1≤k≤n(n−1)/2 1≤ai≤108,n≤10000,1≤k≤n(n−1)/2,完成下面的判断题和单选题:

判断题
  1. 将第 24 行的 m 改为 m - 1,输出有可能不变,而剩下情况为少 11。()

    A. 正确 B. 错误

  2. 将第 22 行的 g + (h - g) / 2 改为 (h + g) >> 1,输出不变。()

    A. 正确 B. 错误

  3. 当输入为 5 7 2 -4 5 1 -3,输出为 5。()

    A. 正确 B. 错误

单选题
  1. 设 a数组中最大值减最小值加 1为 A,则 f 函数的时间复杂度为()。

    A. O(nlog⁡A) B. O(n 2 ^2 2log⁡A) C. O(nlog⁡(nA)) D. O(nlog⁡n)

  2. 将第 10行中的 > 替换为 >=,那么原输出与现输出的大小关系为()。

    A. 一定小于

    B. 一定小于等于且不一定小于

    C. 一定大于等于且不一定大于

    D. 以上三种情况都不对.

  3. 当输入为 5 8 2 -5 3 8 -12,输出为()。

    A. 13 B. 14 C. 8 D. 15

判断题答案与解析
  1. 正确(A)

    • 将第24行的 m 改为 m - 1,二分查找在满足条件时上界变为 m-1。若正确答案为 0,输出不变;否则输出比正确答案少 1。因此说法正确。
  2. 正确(A)

    • g + (h - g) / 2(h + g) >> 1 在数学上等价,且输入值在 int 范围内,不会溢出。因此输出不变。
  3. 正确(A)

    • 输入数组排序后为 [-4, -3, 1, 2, 5],所有差值从小到大排序为 [1, 1, 3, 4, 4, 5, 5, 6, 8, 9],第 7 小的差值为 5,程序输出 5,正确。
单选题答案与解析
  1. C. O(nlog⁡(nA))

    • 函数 f 先排序,时间复杂度 O(n log n)。二分查找范围大小为 A(最大值减最小值加 1),每次迭代调用 f0O(n),二分次数 O(log A)。总时间复杂度为 O(n log n + n log A) = O(n log(nA))
  2. B. 一定小于等于且不一定小于

    • 原程序输出第 k 小的差值 ans。修改后,新程序输出 ans2
      • ans < max_diff,则 ans2 = ans + 1
      • ans = max_diff,则 ans2 = ans
    • 因此原输出一定小于等于新输出,且可能相等(当 ans 为最大差值时)。
  3. B. 14

    • 输入数组排序后为 [-12, -5, 2, 3, 8],所有差值从小到大排序为 [1, 5, 6, 7, 7, 8, 13, 14, 15, 20],第 8 小的差值为 14,程序输出 14

专栏推荐:信奥赛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;
}
相关推荐
寻寻觅觅☆8 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
fpcc8 小时前
并行编程实战——CUDA编程的Parallel Task类型
c++·cuda
ceclar1239 小时前
C++使用format
开发语言·c++·算法
lanhuazui1010 小时前
C++ 中什么时候用::(作用域解析运算符)
c++
charlee4410 小时前
从零实现一个生产级 RAG 语义搜索系统:C++ + ONNX + FAISS 实战
c++·faiss·onnx·rag·语义搜索
老约家的可汗10 小时前
初识C++
开发语言·c++
crescent_悦10 小时前
C++:Product of Polynomials
开发语言·c++
小坏坏的大世界11 小时前
CMakeList.txt模板与 Visual Studio IDE 操作对比表
c++·visual studio
乐观勇敢坚强的老彭11 小时前
c++寒假营day03
java·开发语言·c++
愚者游世12 小时前
brace-or-equal initializers(花括号或等号初始化器)各版本异同
开发语言·c++·程序人生·面试·visual studio