• CCF 丐版刷题笔记


    目录

     

    软件能力认证考试注意事项及实例说明

    CCF软件能力认证上机考试指导书

    202104-1 灰度直方图

    202104-2 邻域均值


    软件能力认证考试注意事项及实例说明

            在参与CCF软件能力认证考试时,有一些注意事项需要考生高度关注,以便获得理想的成绩。为了您更好地理解我们的要求,下面给出了一个试题的案例,供您参考。
    注意事项:

            考试开始时间一到,考生即可以开始答题。考生可在考试时间内随时提交自己的代码。每道题的代码均可以提交任意多次,以最后一次提交的为准。考生可以随时浏览自己最后一次提交的答案。

            评测以考生通过考试系统提交的答案为准,未提交的答案不作为评测依据。

            考试时间以系统的计时为准,所有考生必须在考试规定的时间内答题,并在考试时间内提交自己的答案,超过考试时间后无法提交代码。

            考生必须提交一个单一的文件作为答案,除了引用系统标准的库文件外,不得引用其他非标准的库文件或自定义的其他文件(如C++不得引用stdafx.h之类的头文件),否则程序无法通过编译。

            对于C++语言,主函数的定义必须是 int main() 或 int main(int argc, const char *argv[]),而且主函数的返回值必须是0,否则可能出现评测问题。

            对于Java语言,主类名称必须是Main,即类的定义必须是public class Main,而入口函数应当为public static void main(String[] args)。程序中不能使用package命令定义包信息,否则可能无法评测。

            考生必须从标准输入中读入输入数据,将输出结果写到标准输出中。

            每道试题均有输入输出格式说明。考生可以假设评测时所给的输入满足输入格式的要求,而且数据范围符合数据的说明,不需要编制对输入进行正确性判断的语句。

            考生必须严格按照输出格式的说明进行输出,不得输出“请输入n”之类的提示性语句,不得输出用于调试的中间结果,否则评测系统会认为结果错误。输出时未按指定要求换行或大小写不符合题目要求的,系统会判定为错误。试题所有的输出均为半角字符(ASCII码在10到127之间),若输出了全角字符或其他特殊符号的,评定为错误。

            试题中给定了输入输出的样例用于帮助考生理解试题和输入输出格式,评测时一般使用一系列专门设计的数据对考生提交的程序进行评测,因此有可能考生提交的程序可以正确的执行样例却不能通过评测数据。考生可自行设计符合要求的数据测试和调试自己的程序以提高自己代码的正确性。

            程序的长度不得超过64KB,即65536字节,否则不能提交。

            程序在执行时会有严格的时间和内存限制,超过限制时对应的评测点不得分。

    CCF软件能力认证上机考试指导书

    尊敬的考生:

            为了帮助您更好地了解CCF软件能力认证考试平台的特点,以便在参与软件能力认证上机考试时能够准确编制出符合评测要求的程序,考出自己真实的软件开发能力,故整理该指导书供您参考。

            在您进入考场,首先按照监考老师的要求,打开考试系统,使用自己的准考证号和证件号登录系统,查看考试说明,等待考试开始。

            考试开始后,刷新页面即可看到试题列表。

            点开每道试题可以看到考题的详细信息。在阅读问题描述中,除阅读题目的意思外,要特别注意在问题描述中给出的输入格式和输出格式描述。其中输入格式是评测时需要满足的输入格式,你不需要对格式进行检查,读入数据时直接按照格式读入即可。而输出格式是你的程序运行时输出必须满足的格式,你的输出必须严格按照输出格式的要求进行编制,未按要求的将不能得分。

            在读题时,一定要特别细致,并通过验算试题中给出的样例等方式确定题目的全部意思。

            读完题后,一般使用自己熟悉的编辑器(如Dev-CPP或Eclipse)编写程序,在编辑器里面编译调试。通常的的方法是先使用试题提供的样例来测试,再自己设计一些数据来验证。

            在成绩评测时,评测方会使用精心设计的输入数据来运行你的程序,并检查你程序输出的正确性,这些数据通常和样例给出的数据是不一样的。如果用你的程序运行样例不能得到正确结果,一般是因为编制的程序存在错误,该题将不能得分,或不能得到满分。如果样例得到了正确结果,也不代表该程序完全正确,你最好使用多组数据从多角度进行测试。

            在测试好自己的程序后,请将整个程序从编辑器中拷贝出来粘贴到考试系统提交窗口里面,再提交即可。每编制与测试好一个程序后要马上提交自己的代码,以免接近考试结束时间,因为网络原因提交不上。如果提交程序之后又有修改,可以再次提交新的版本,考试系统会以你最后提交的为准。

            在答题时,有一些经常会出现的问题影响考试成绩。大概归纳如下:

            1. 输出了提示语句。有的考生在输入之前编写了一些内容提示下面输入的是什么,比如“请输入n”之类的,或者在输出结果前给出了提示,比如“答案是”之类的。这些语句被当成了程序的输出,导致输出与答案不对应,因此不能得分。

            2. 不是从标准输入输出来读入和输出数据。在评测考试结果时,评测方只会通过标准输入来给输入数据,也只会检查标准输出的数据,如果你使用了命令行之类的方式传递数据,那么数据传不到你的程序中,也不可能证明你的程序是正确的。一般而言,C语言使用scanf和printf来读入和输出数据,C++语言使用cin和cout来读入和输出数据,Java语言使用Scanner类读入System.in流,输出到System.out中。

            3. C++语言引用了非标准的头文件,比如stdafx.h之类的,这些文件只存在于考生自己的计算机中,而不在评测方的计算机中,因此在评测时会出现编译错误。

            4. Java语言没有以Main为主类名称或者使用了package语句定义了包名称。在评测时,评测方会把Java语言提交的代码命名为Main.java,然后调用命令“javac Main.java”来编译,调用命令“java Main”来执行,如果主类没有以Main来命名,或者使用了package,后一条命令就会执行失败,使得评测程序的结果为错误。

            5. 程序只能通过样例数据而不能通过其他数据。在测试程序正确性时会使用很多数据来测试,如果你的程序只能通过样例数据而没有测试其他数据,可能会因为程序中隐藏的错误导致运行其他数据时得不到正确的结果。

    202104-1 灰度直方图

    问题描述

    试题编号:202104-1
    试题名称:灰度直方图
    时间限制:1.0s
    内存限制:512.0MB
    问题描述:

    问题描述

    一幅长宽分别为 n 个像素和 m 个像素的灰度图像可以表示为一个 n×m 大小的矩阵 A。
    其中每个元素 Aij(0≤i 具体来说,一个 8 比特的灰度图像中每个像素的灰度范围是 [0,128)。

    一副灰度图像的灰度统计直方图(以下简称“直方图”)可以表示为一个长度为 L 的数组 h,其中 h[x](0≤x

    已知一副图像的灰度矩阵 A,试计算其灰度直方图 h[0],h[1],⋯,h[L−1]。

    输入格式

    输入共 n+1 行。

    输入的第一行包含三个用空格分隔的正整数 n、m 和 L,含义如前文所述。

    第二到第 n+1 行输入矩阵 A。
    第 i+2(0≤i

    输出格式

    输出仅一行,包含用空格分隔的 L 个整数 h[0],h[1],⋯,h[L−1],表示输入图像的灰度直方图。

    样例输入

    1. 4 4 16
    2. 0 1 2 3
    3. 4 5 6 7
    4. 8 9 10 11
    5. 12 13 14 15

    样例输出

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

    样例输入

    1. 7 11 8
    2. 0 7 0 0 0 7 0 0 7 7 0
    3. 7 0 7 0 7 0 7 0 7 0 7
    4. 7 0 0 0 7 0 0 0 7 0 7
    5. 7 0 0 0 0 7 0 0 7 7 0
    6. 7 0 0 0 0 0 7 0 7 0 0
    7. 7 0 7 0 7 0 7 0 7 0 0
    8. 0 7 0 0 0 7 0 0 7 0 0

    样例输出

    48 0 0 0 0 0 0 29

    评测用例规模与约定

    全部的测试数据满足 0

    作答

    1. #include
    2. using namespace std;
    3. int main(){
    4. int row, column, n;
    5. cin>>row; cin>>column; cin>>n;
    6. vector<int> h(n, 0);
    7. for(int i = 0; i < row*column; i++){
    8. int value = 0;
    9. cin>>value;
    10. h[value]++;
    11. }
    12. // CPP-14 / CPP-11
    13. /*
    14. for(auto ans : h){
    15. cout<
    16. }
    17. */
    18. // CPP
    19. for(int i = 0; i < h.size(); i++){
    20. cout<" ";
    21. }
    22. return 0;
    23. }

    202104-2 邻域均值

    问题描述

    试题编号:202104-2
    试题名称:邻域均值
    时间限制:1.0s
    内存限制:512.0MB
    问题描述:

    试题背景

    顿顿在学习了数字图像处理后,想要对手上的一副灰度图像进行降噪处理。不过该图像仅在较暗区域有很多噪点,如果贸然对全图进行降噪,会在抹去噪点的同时也模糊了原有图像。因此顿顿打算先使用邻域均值来判断一个像素是否处于较暗区域,然后仅对处于较暗区域的像素进行降噪处理。

    问题描述

    待处理的灰度图像长宽皆为 n 个像素,可以表示为一个 n×n 大小的矩阵 A,其中每个元素是一个 [0,L) 范围内的整数,表示对应位置像素的灰度值。
    对于矩阵中任意一个元素 Aij(0≤i,j邻域定义为附近若干元素的集和:

    Neighbor(i,j,r)={Axy|0≤x,y

    这里使用了一个额外的参数 r 来指明 Aij 附近元素的具体范围。根据定义,易知 Neighbor(i,j,r) 最多有 (2r+1)2 个元素。

    如果元素 Aij 邻域中所有元素的平均值小于或等于一个给定的阈值 t,我们就认为该元素对应位置的像素处于较暗区域
    下图给出了两个例子,左侧图像的较暗区域在右侧图像中展示为黑色,其余区域展示为白色。

    现给定邻域参数 r 和阈值 t,试统计输入灰度图像中有多少像素处于较暗区域

    输入格式

    输入共 n+1 行。

    输入的第一行包含四个用空格分隔的正整数 n、L、r 和 t,含义如前文所述。

    第二到第 n+1 行输入矩阵 A。
    第 i+2(0≤i

    输出格式

    输出一个整数,表示输入灰度图像中处于较暗区域的像素总数。

    样例输入

    1. 4 16 1 6
    2. 0 1 2 3
    3. 4 5 6 7
    4. 8 9 10 11
    5. 12 13 14 15

    样例输出

    7

    样例输入

    1. 11 8 2 2
    2. 0 0 0 0 0 0 0 0 0 0 0
    3. 0 0 0 0 0 0 0 0 0 0 0
    4. 0 7 0 0 0 7 0 0 7 7 0
    5. 7 0 7 0 7 0 7 0 7 0 7
    6. 7 0 0 0 7 0 0 0 7 0 7
    7. 7 0 0 0 0 7 0 0 7 7 0
    8. 7 0 0 0 0 0 7 0 7 0 0
    9. 7 0 7 0 7 0 7 0 7 0 0
    10. 0 7 0 0 0 7 0 0 7 0 0
    11. 0 0 0 0 0 0 0 0 0 0 0
    12. 0 0 0 0 0 0 0 0 0 0 0

    样例输出

    83

    评测用例规模与约定

    70% 的测试数据满足 n≤100、r≤10。

    全部的测试数据满足 0

    作答

    1. #include
    2. using namespace std;
    3. int main(){
    4. int n, L, r, t;
    5. cin>>n; cin>>L; cin>>r; cin>>t;
    6. vector< vector<int> > A(n, vector<int>(n, 0)); // >>之间加个空格
    7. for(int i = 0; i < n; i++){
    8. for(int j = 0; j < n; j++){
    9. cin>>A[i][j];
    10. }
    11. }
    12. /*
    13. cout<
    14. for(int i = 0; i < n; i++){
    15. for(int j = 0; j < n; j++){
    16. cout<
    17. }
    18. cout<
    19. }
    20. */
    21. int ans = 0;
    22. for(int i = 0; i < n; i++){
    23. for(int j = 0; j < n; j++){
    24. float sum = 0.0;
    25. float num = 0.0;
    26. float avg = 0.0;
    27. for(int dx = i-r; dx <= i+r; dx++){
    28. for(int dy = j-r; dy <= j+r; dy++){
    29. if(dx>=0 && dx=0 && dy
    30. sum += A[dx][dy];
    31. num++;
    32. }
    33. }
    34. }
    35. avg = sum / num;
    36. //cout<<"avg: "<
    37. if(avg <= float(t)){
    38. ans++;
    39. }
    40. }
    41. }
    42. cout<
    43. return 0;
    44. }

    运行结果

    代码长度编程语言评测结果得分时间使用空间使用
    819BCPP14运行超时70运行超时4.472MB

    运行超时分析原因为:70% 的测试数据满足 n≤100、r≤10。

    优化

    1. #include
    2. using namespace std;
    3. int main(){
    4. int n, L, r, t;
    5. cin>>n; cin>>L; cin>>r; cin>>t;
    6. vector< vector<int> > A(n, vector<int>(n, 0)); // >>之间加个空格
    7. for(int i = 0; i < n; i++){
    8. for(int j = 0; j < n; j++){
    9. cin>>A[i][j];
    10. }
    11. }
    12. int ans = 0;
    13. for(int i = 0; i < n; i++){
    14. float sum = 0.0;
    15. float num = 0.0;
    16. for(int dx = i-r>0 ? i-r : 0; dx <= i+r; dx++){
    17. for(int dy = 0; dy < r; dy++){
    18. if(dx
    19. sum += A[dx][dy];
    20. num += 1;
    21. }
    22. }
    23. }
    24. for(int j = 0; j < n; j++){
    25. float avg = 0.0;
    26. for(int x = i-r>0 ? i-r : 0; x <= i+r; x++){
    27. if(j+r
    28. //cout<
    29. //cout<
    30. sum += A[x][j+r];
    31. num ++;
    32. }
    33. if(j>r && x
    34. sum -= A[x][j-r-1];
    35. num --;
    36. }
    37. }
    38. avg = sum / num;
    39. //cout<<"avg: "<
    40. if(avg <= float(t)){
    41. ans++;
    42. }
    43. }
    44. }
    45. cout<
    46. return 0;
    47. }

    运行结果

    代码长度编程语言评测结果得分时间使用空间使用
    906BCPP14正确100296ms4.5MB
  • 相关阅读:
    Python:Dnspython工具包查询域名的DNS解析记录
    2022深圳工业展,正运动技术邀您一起开启激光加工智能制造!
    HummerRisk 入门3:开发手册
    信息系统项目管理师---第十三章项目合同管理历年考题
    有关cache的dirty比特位和Valid比特位的理解
    深度学习:张量 介绍
    (185)Verilog HDL:设计一个移位功能Lfsr5
    HTTP协议
    【JavaSE与数据结构】数据结构之哈希表
    修改git tag的描述信息
  • 原文地址:https://blog.csdn.net/weixin_43349479/article/details/119960463