2021年CSP-J初赛真题及答案解析(阅读程序2)

2021年CSP-J初赛真题及答案解析(阅读程序2)

第2题

#include<iostream>#include<string>usingnamespacestd;charbase[64];chartable[256];voidinit(){for(inti=0;i<26;i++)base[i]='A'+i;for(inti=0;i<26;i++)base[26+i]='a'+i;for(inti=0;i<10;i++)base[52+i]='0'+i;base[62]='+',base[63]='/';for(inti=0;i<256;i++)table[i]=0xff;for(inti=0;i<64;i++)table[base[i]]=i;table['=']=0;}stringdecode(string str){string ret;inti;for(i=0;i<str.size();i+=4){ret+=table[str[i]]<<2|table[str[i+1]]>>4;if(str[i+2]!='=')ret+=(table[str[i+1]]&0x0f)<<4|table[str[i+2]]>>2;if(str[i+3]!='=')ret+=table[str[i+2]]<<6|table[str[i+3]];}returnret;}intmain(){init();cout<<int(table[0])<<endl;string str;cin>>str;cout<<decode(str)<<endl;return0;}

判断题(每题 1.5 分)

  1. 输出的第二行一定是由小写字母、大写字母、数字和+/=构成的字符串。( )

    • A. 正确
    • B. 错误
  2. 可能存在输入不同,但输出的第二行相同的情形。( )

    • A. 正确
    • B. 错误
  3. 输出的第一行为-1。( )

    • A. 正确
    • B. 错误

单选题

  1. 设输入字符串长度为ndecode函数的时间复杂度为( )

    • A. (O(\sqrt{n}))
    • B. (O(n))
    • C. (O(n \log n))
    • D. (O(n^2))
  2. 当输入为Y3Nx时,输出的第二行为( )。

    • A. csp
    • B. csq
    • C. CSP
    • D. Csp
  3. 当输入为Y2NmIDIwMjE=时,输出的第二行为( )。

    • A. ccf2021
    • B. ccf2022
    • C. ccf 2021
    • D. ccf 2022

答案与解析

1. 答案:B(错误)
解析:decode执行的是 Base64 解码,输出的是原始二进制数据对应的字符。原始数据可以是任意字节值(例如 0x00~0xFF),这些字节对应的字符不一定都是大小写字母、数字或+/=。例如,解码后可能出现不可打印的控制字符或扩展 ASCII 码。

2. 答案:A(正确)
解析:Base64 解码时,每个字符用 6 位表示,分组解码时最后未完全使用的低位(填充位)会被忽略。因此,同一段明文可能对应多种不同的 Base64 编码串,解码器不检查这些被忽略的位,所以输入不同但输出相同是可能的。

3. 答案:A(正确)
解析:table[0]init()中被初始化为0xff0xff作为有符号char类型时值为-1,通过int(table[0])输出,结果为-1

4. 答案:B(O(n))
解析:decode函数中,循环步长为 4,循环次数约为n/4。每次循环内的操作(位运算、赋值)均为常数时间,因此总时间复杂度为线性阶,即 (O(n))。

5. 答案:B(csq)
解析:对Y3Nx进行解码:

  • Y(24)3(55)N(13)x(49)
  • 第 1 个字节:24 << 2 | 55 >> 4 = 96 | 3 = 99'c'
  • 第 2 个字节:(55 & 0x0F) << 4 | 13 >> 2 = 7 << 4 | 3 = 112 | 3 = 115's'
  • 第 3 个字节:(13 & 0x03) << 6 | 49 = 1 << 6 | 49 = 64 | 49 = 113'q'
    得到csq

6. 答案:C(ccf 2021)
解析:将输入分组解码:

  • Y2Nm→ 解码为ccf
  • IDIw→ 解码为20(注意开头有一个空格)
  • MjE=→ 解码为21(末尾有=,只产生一个字节)
    拼接后为ccf+20+21=ccf 2021


更多内容请关注专栏:信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转


【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

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

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

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

3、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 点击跳转

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

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

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

5、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 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}