第22次 CCF CSP认证一二题题解及感悟

  • 第一题灰度直方图
    • 题目重述
    • 题目分析
    • 代码及注释(C++)
  • 第二题邻域均值
    • 题目重述
    • 题目分析
    • 代码及注释(C++)
    • 感悟

第一题灰度直方图

题目重述

一幅长宽分别为 n 个像素和 m 个像素的灰度图像可以表示为一个 n×m 大小的矩阵 A。

其中每个元素 Aij(0≤i<n、0≤j<m)是一个 [0,L) 范围内的整数,表示对应位置像素的灰度值。

具体来说,一个 8 比特的灰度图像中每个像素的灰度范围是 [0,256)。

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

显然,h[0] 到 h[L−1] 的总和应等于图像中的像素总数 n⋅m。

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

输入格式
输入共 n+1 行。

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

第二到第 n+1 行输入矩阵 A。第 i+2(0≤i<n)行包含用空格分隔的 m 个整数,依次为 Ai0,Ai1,⋯,Ai(m−1)。

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

数据范围
0<n,m≤500,
4≤L≤256
输入样例1:
4 4 16
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
输出样例1:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

题目分析

简单来说,第一题是用来统计一个矩阵中数值相等的点的个数,不同数值的点构成一个数组,数组中存储各个数值的点的个数,最终输出该数组即可

代码及注释(C++)

#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;const int N = 510, M=510, L=266;int n,m,l;
int h[L];//灰度值个数数组
int s[N][N];//矩阵数组int main()
{cin>>n>>m>>l;for(int i=0;i<n;i++)//三重循环,输入矩阵后进行统计{for(int j=0;j<m;j++){cin>>s[i][j];for(int k=0;k<l;k++)      {if(s[i][j]==k)h[k]++;}}      }for(int i=0;i<l;i++) printf("%d ",h[i]);return 0;
}

第二题邻域均值

题目重述

顿顿在学习了数字图像处理后,想要对手上的一副灰度图像进行降噪处理。

不过该图像仅在较暗区域有很多噪点,如果贸然对全图进行降噪,会在抹去噪点的同时也模糊了原有图像。

因此顿顿打算先使用邻域均值来判断一个像素是否处于较暗区域,然后仅对处于较暗区域的像素进行降噪处理。

待处理的灰度图像长宽皆为 n 个像素,可以表示为一个 n×n 大小的矩阵 A,其中每个元素是一个 [0,L) 范围内的整数,表示对应位置像素的灰度值。

对于矩阵中任意一个元素 Aij(0≤i,j<n),其邻域定义为附近若干元素的集和:

Neighbor(i,j,r)={Axy|0≤x,y<n and |x−i|≤r and |y−j|≤r}
这里使用了一个额外的参数 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<n)行包含用空格分隔的 n 个整数,依次为 Ai0,Ai1,⋯,Ai(n−1)。

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

数据范围
70% 的测试数据满足 n≤100、r≤10。
全部的测试数据满足 0<n≤600、0<r≤100 且 2≤t<L≤256。

输入样例1:
4 16 1 6
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
输出样例1:
7

题目分析

题目定义了一个邻域,统计元素aij周围一个区域内的元素总和,再除以元素个数与阈值t比较,若小于等于t,则证明元素aij处于较暗区域,最终计算出较暗区域点的个数。

领域中元素个数最多为(2r+1)2,当领域左上角(x1,y1)或邻域右下角(x2,y2)超出边界时元素个数小于(2r+1)2,需要用(x2-x1+1)*(y2-y1+1)计算元素个数。

计算一个矩阵中子矩阵的部分可以使用前缀和,或者叫部分和。一维前缀和容易理解,如已知数组a[N],数组和s[N],求a3,a4,…,a10的和,利用前缀和计算:s[10]-s[2]。

本题使用二维前缀和,计算如图所示矩形面积,左上角坐标为(x1,y1),右下角坐标为(x2,y2),s[i][j]表示第i行j列格子左上部分所有元素的和,故所求面积为
s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]

代码及注释(C++)

#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;const int N = 610;int n,l,r,t;
int a[N][N];//矩阵数组
int s[N][N];//二维前缀和数组int main()
{cin>>n>>l>>r>>t;for(int i=0;i<n;i++)for(int j=0;j<n;j++){cin>>a[i][j];s[i][j]=a[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];//计算前缀和}    int res=0; for(int i=0;i<n;i++)for(int j=0;j<n;j++){int x1=max(0,i-r), y1=max(0,j-r);int x2=min(n-1,i+r), y2=min(n-1,j+r);int sum=s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];int cnt=(x2-x1+1)*(y2-y1+1);if(sum<=t*cnt)//sum/cnt可能产生小数,故将cnt与t相乘res++;}cout<<res;return 0;
}

感悟

去年12月份我第一次考csp,只做出了第一题,说实话并不意外甚至是超常发挥,因为准备时间很短,连大一C语言的基础知识都忘记了;第二次是今年4月份,买了acwing的csp辅导课,看y总的直播课,感觉提高还是很多的,但是正式考试的时候老毛病又犯了,紧张到大脑停止思考,我觉得可能第一题都做不出来了,挣扎了快一个小时,终于做出来了,第二题有几个样例都通过了,但是没得分,这次的判分很严格,最终结果是和第一次一样的成绩,排名甚至到80%了。等到考试结束,听y总讲完,其实也没这么难。

说实话,csp前两题不难,多刷题就ok,第三题大模拟难度不大,但是很庞杂,细节很多,这次的dhcp服务器跟着y总的视频敲了一遍,之后自己看着题目又复盘了一次,考试估计很难做出来。

考csp的初衷是想免考研机试,顺便加点综测,开始刷题的时候觉得很难,难以下手,知识点很多,不知道怎么准备,也很迷茫,想过放弃。

考过两次之后,心态有变化了,就算最后考不到300分以上,也不会有遗憾了,毕竟在这个过程中,自己有了很多提高。希望下次更好,考个好分数 ,加油!

第22次 CCF CSP认证一二题题解及感悟相关推荐

  1. ccf csp认证刷题笔记202212

    此处用以记录一下自己在刷题时候的思路和使用的方法.本人算法小垃圾,所以基本上使用最原始的方法来完成这些题目. 202212-1: 题目: 絮絮叨叨的分析: 单看题目,简直不知道其在说什么.可能是我的语 ...

  2. CCF CSP认证最新2022-12题解c++(全网首发)

    第一次写题解,代码没带注释,请谅解,尽力在题目分析中说明白. 现值计算 http://118.190.20.162/view.page?gpid=T160 问题描述 输入格式 输出格式 输出到标准输出 ...

  3. CCF CSP认证菜鸟刷题日志

    CCF CSP菜鸟刷题日志(c/c++) 本萌新写给自己看的,要是有大佬路过,请多多指教orz 立个flag:每日一更,至201903 9月15ccf csp,冲鸭! 今天(2019.8.18)起每天 ...

  4. python认证考试_Python入门习题(39)——CCF CSP认证考试真题:公共钥匙盒

    CCF CSP认证考试真题:共钥匙盒 问题描述 试题编号:201709-2 试题名称:公共钥匙盒 时间限制:1.0s 内存限制:256.0MB 问题描述 有一个学校的老师共用N个教室,按照规定,所有的 ...

  5. 以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系

    原文链接:以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系 发布单位:学会      发布时间:2017-01-20 16:16 作者:陆建峰    余立功 摘要:为提升计算机专业类学生 ...

  6. 参加CCF CSP认证者须知

    发布单位:中国计算机学会      发布时间:2014-11-11 15:06    凡有意参加CCF CSP认证者,请在cspro.org网站上注册.报名.缴费.打印准考证,参加认证后可以在网站查询 ...

  7. CCF CSP认证考试在线评测系统

    关于CCF CSP认证考试在线评测系统 CCF CSP认证考试简介 CCF是中国计算机学会的简称.CCF计算机软件能力认证(简称CCF CSP认证考试)是CCF于2014年推出,是CCF计算机职业资格 ...

  8. CCF —— CSP认证

    1.认证知识要求: 考试内容主要覆盖大学计算机专业所学习的程序设计.数据结构以及算法,以及相关的数学基础知识.包括但不限于: (1)程序设计基础 逻辑与数学运算,分支循环,过程调用(递归),字符串操作 ...

  9. 计算机考csp200分啥水平,计算机与信息工程学院成功举办第20次CCF CSP认证考试

    2020年9月13日,计算机与信息工程学院在计算机大楼201举办第二十次CCF CSP认证考试.这是计算机与信息工程学院2019年12月与中国计算机学会签署协议.河南大学正式成为CSP认证考点以来,举 ...

  10. 北航ccf计算机软件能证排名前18%,CCF成功举办第十一次CCF CSP认证

    第十一次CCF CSP计算机软件能力认证(CSP)于2017年9月17日在全国66所院校举办,这是2017年度CCF举办的第二次认证,来自全国200多个单位的6591人参加了本次认证.通过对本次CSP ...

最新文章

  1. [Objective-C]OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)
  2. final+static
  3. java 序列化保存_保存到二进制/序列化Java
  4. SQL Server2000企业管理器在Win7中新建表错误的解决方法
  5. css3实现带有简单动画按钮导航
  6. 数据 3 分钟 | 国产数据库迎来 2 名开源玩家、数据库厂商年度报告都说了些什么?...
  7. 取消Pycharm双击shift弹出来的搜索框
  8. Swift - iCloud存储介绍
  9. Cordova--打包问题
  10. linux 内核头文件、内核库文件
  11. 金融衍生品软件产品设计必备知识——上海黄金交易所产品概览
  12. CRM八面体:客户关系管理成功案例1 荷兰皇家航空 KLM Royal Dutch Airlines
  13. 淘宝【高佣卷】、【精品券】、【详情图片】
  14. Unity线性空间UI的问题
  15. 蓝桥耐摔指数 JAVA暴解(摔手机)
  16. 修改远程桌面3389端口
  17. java布道师_JavaWeb主管布道师
  18. js判断APP和浏览器
  19. Homography 估计单应性矩阵代码实现
  20. ubuntu16.04安装intel集显驱动过程问题总结

热门文章

  1. 新冒险岛2010java_冒险岛3转问题及答案,2010-03-05更新
  2. 神经系统的肿瘤有哪些,脑神经肿瘤最常见的是
  3. 暗黑复制服务器物品,暗黑2战网环境下复制dupe物品装备
  4. 00.Spring源码编译
  5. 网站优化后如何降低阿里云国际版服务器成本
  6. Apache搭建Windows代理服务器
  7. NCCN指南下载以后无法复制,粘贴原因及PDF密码破解
  8. 计算广告学习资料汇总
  9. hd计算机技术,BD和HD的区别是什么?
  10. ae渲染出现错误是什么问题_怎样彻底检查根治AE导出失败,渲染影片出错问题...