【ACM】图像分类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/84192206

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1003

【问题描述】

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

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

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

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

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

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

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

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

【输入描述】

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

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

【输出描述】

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

扫描二维码关注公众号,回复: 4203779 查看本文章

【提示】

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

#include<math.h>

(int)floor(x)


#include <math.h>
#include <stdio.h>
double a[204][102];
int main ()
{
	int i,j,n,d1;
	double d;
	scanf("%d",&n);
	for(i=0;i<2*n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%lf",&a[i][j]);
		}
	} 
	for(i=n;i<2*n;i++)
	{
		for(j=0;j<n;j++)
		{
			d+=((a[i][j]-a[i-n][j])*(a[i][j]-a[i-n][j]));
		}
	} 
	d1=(int)floor(sqrt(d));
	printf("%d",d1);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/84192206