中北大学NUC2017新生赛1004/NOJ-1984

题目:

图像分类

时间限制: 1000ms 内存限制: 65535KB
通过次数: 8 总提交次数: 18
问题描述

现在, 我们需要你来解决一项图像分类任务。

首先我们需要介绍下简单图像的数据存储形式,你可以粗略的认为图像在数字意义就是一个二维矩阵(我们这里不考虑通道),矩阵的每个位置的值表示图像该位置的像素点的值。

关于图像分类,我们希望把相似的两个图像尽可能分到一个类里。因此我们需要引入一个考察两个图像是否相似的标准,我们需要一个度量函数来表示两个图像的相似程度。

下面我们简单的介绍一下我们所采用的度量方式。



即为我们常见的 Manhattan distance (曼哈顿距离)

一个n*n的图像可以看做一个n*n维的向量。

显而易见,如果两个图像是完全相同的,那么两个图像的每个对应的像素点都相同,即二维矩阵是完全相同,曼哈顿距离为0。

现在,你需要计算p=2时两个图像的dist_mk,即它们的欧几里得距离。

输入描述

第一行输入n表示图像的尺寸(即图片的高跟宽相等均为n)。

然后输入两个n*n的矩阵,分别表示两张照片。(保证题目中出现的数字均为正整数,且不超过100)

输出描述

输出一个整数(答案向下取整),表示两张图片的欧几里得距离。

样例输入
2
1 1
1 1
2 2
2 2
样例输出
2
来源
中北大学2017年程序设计新生赛
提示

对一个小数x向下取整可以写为

#include<math.h>

(int)floor(x)



思路:水题

根据题目所给公式计算即可



#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int a[110][110];
int b[110][110];

int main(){
	ios::sync_with_stdio(false);
	int n;
	cin>>n;
	for(int i = 1 ;i<=n ; i++){
		for(int j = 1 ; j<=n ; j++)
			cin>>a[i][j];
	}
	for(int i = 1 ;i<=n ; i++){
		for(int j = 1 ; j<=n ; j++)
			cin>>b[i][j];
	}
	double ans = 0;
	for(int i = 1 ; i<=n ; i++){
		for(int j = 1 ; j<=n ; j++){
			ans += (double)abs(a[i][j]-b[i][j]) *abs(a[i][j]-b[i][j]);
		}
	}
	ans = sqrt(ans);
	cout<<(int)floor(ans)<<endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值