当前位置: 首页 > article >正文

csp22前2题

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

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

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

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

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

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

输入格式

输入共 n+1n+1 行。

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

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

输出格式

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

数据范围

0<n,m≤5000<n,m≤500,
4≤L≤2564≤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
输入样例2:
7 11 8
0 7 0 0 0 7 0 0 7 7 0
7 0 7 0 7 0 7 0 7 0 7
7 0 0 0 7 0 0 0 7 0 7
7 0 0 0 0 7 0 0 7 7 0
7 0 0 0 0 0 7 0 7 0 0
7 0 7 0 7 0 7 0 7 0 0
0 7 0 0 0 7 0 0 7 0 0
输出样例2:
48 0 0 0 0 0 0 29
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int n, m, l;
int g[N][N];
int main()
{
    cin >> n >> m >> l;
    map<int, int> mp;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            int x;
            cin >> x;
            mp[x] += 1;
        }
    }
    for(int i = 0; i < l; i++)
    {
        cout << mp[i]  << " ";
    }
}

邻域均值

  •    题目
  •    提交记录
  •    讨论
  •    题解
  •    视频讲解

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

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

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

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

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

Neighbor(i,j,r)={Axy|0≤x,y<n and |x−i|≤r and |y−j|≤r}Neighbor(i,j,r)={Axy|0≤x,y<n and |x−i|≤r and |y−j|≤r}

这里使用了一个额外的参数 rr 来指明 AijAij 附近元素的具体范围。

根据定义,易知 Neighbor(i,j,r)Neighbor(i,j,r) 最多有 (2r+1)2(2r+1)2 个元素。

如果元素 AijAij 邻域中所有元素的平均值小于或等于一个给定的阈值 tt,我们就认为该元素对应位置的像素处于较暗区域

下图给出了两个例子,左侧图像的较暗区域在右侧图像中展示为黑色,其余区域展示为白色。

1.png

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

输入格式

输入共 n+1n+1 行。

输入的第一行包含四个用空格分隔的正整数 nn、LL、rr 和 tt,含义如前文所述。

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

输出格式

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

数据范围

70%70% 的测试数据满足 n≤100n≤100、r≤10r≤10。
全部的测试数据满足 0<n≤6000<n≤600、0<r≤1000<r≤100 且 2≤t<L≤2562≤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
输入样例2:
11 8 2 2
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 7 0 0 0 7 0 0 7 7 0
7 0 7 0 7 0 7 0 7 0 7
7 0 0 0 7 0 0 0 7 0 7
7 0 0 0 0 7 0 0 7 7 0
7 0 0 0 0 0 7 0 7 0 0
7 0 7 0 7 0 7 0 7 0 0
0 7 0 0 0 7 0 0 7 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
输出样例2:
83

#include <bits/stdc++.h>
using namespace std;
const int N = 605;
int a[N][N];
int n, l, r, t;
int solve(int x1, int y1, int x2, int y2)
{
//   cout << a[x2][y2] - a[x2][y1 - 1] - a[x1 - 1][y2] + a[x1][y1] << endl;
    return a[x2][y2] - a[x2][y1 - 1] - a[x1 - 1][y2] + a[x1-1][y1-1];
    
}
int main()
{
    int res = 0;
    cin >> n >> l >> r >> t;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            cin >> a[i][j];
            a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
        }
    }
    // for(int i = 1; i <= n; i++)
    // {
    //     for(int j = 1; j <= n; j++)
    //     {
    //         cout << a[i][j] << " ";
    //     }
    //     cout << endl;
    // }
    for(int x = 1; x <= n; x++)
    {
        for(int y = 1; y <= n; y ++)
        {
            int cnt = 0;
            int min_x = max(1, x - r), max_x = min(n, x + r);
            int min_y = max(1, y - r), max_y = min(n, y + r);
            // cout << min_x << " " << min_y <<" " << max_x << " " <<  max_y <<endl;
            cnt = (max_y - min_y + 1) * (max_x - min_x + 1);
            if(solve(min_x, min_y, max_x, max_y) <= t * cnt) res++;
        }
    }
    cout << res << endl;
}


http://www.kler.cn/a/508981.html

相关文章:

  • Spark任务提交流程
  • Linux使用SSH连接GitHub指南
  • 二叉树总结(hot100)
  • 19. C语言 共用体(Union)详解
  • tlias部门管理-新增部门-接口开发
  • 计算机网络 (41)文件传送协议
  • JWT(数据结构、认证流程、加密、解密过程)、对称加密和非对称加密
  • C++从入门到实战(一)C++入门基础
  • WPS数据分析000001
  • SparkSQL函数
  • ComfyUI 矩阵测试指南:用三种方法,速优项目效果
  • 适配器模式详解:解决接口不兼容问题的灵活设计模式
  • 如何修改React 项目版本
  • 21天学通C++——11多态(引入多态的目的)
  • 用户中心项目教程(二)---umi3的使用出现的错误
  • 通过idea创建的springmvc工程需要的配置
  • vue3常用的组件的通信方式
  • 低空经济市场竞争激烈,无人机研发公司如何突破困境?
  • Hive合并小文件
  • 数据结构——队列和栈的面试题分析
  • ARM学习(42)CortexM3/M4 MPU配置
  • 如何升级node.js版本
  • o.h.engine.jdbc.spi.SqlExceptionHelper : Zero date value prohibited
  • Java 文件操作
  • 【蓝桥杯】43689.包子凑数
  • 【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度