CSP-S 提高级 · CSP 2024 提高级第一轮 第 16 题

阅读程序 · 答案 ABC · 考点:位运算、快速排序、分治算法、二叉树基础

← 整套速查表 CSP-S 提高级 全部真题

题目

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)

第 1 题

#include <iostream>
using namespace std;

const int N = 1000;
int c[N];

int logic(int x, int y) {
    return (x & y) ^ ((x ^ y) | (~x & y));
}

void generate(int a, int b, int *c) {
    for (int i = 0; i < b; i++)
        c[i] = logic(a, i) % (b + 1);
}

void recursion(int depth, int *arr, int size) {
    if (depth <= 0 || size <= 1) return;
    int pivot = arr[0];
    int i = 0, j = size - 1;
    while (i <= j) {
        while (arr[i] < pivot) i++;
        while (arr[j] > pivot) j--;
        if (i <= j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++; j--;
        }
    }
    recursion(depth - 1, arr, j + 1);
    recursion(depth - 1, arr + i, size - i);
}

int main() {
    int a, b, d;
    cin >> a >> b >> d;
    generate(a, b, c);


(本题为阅读程序 / 完善程序,完整题目与测试数据见平台)
答案:ABC

考点

位运算 讲解 →位运算 真题汇总 →快速排序分治算法二叉树基础

解题思维

看到复杂位运算 → 先真值表化简;看到递归分治 → 想排序复杂度。

常见错误

logic 函数形式复杂,易误判为与/或;快速排序深度不足时误以为有序。

详细解析(节选)

考点:位运算化简|快速排序(分治)|时间复杂度

解析

逻辑函数化简为按位异或;递归实现有限深度快速排序。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断