列表

详情


NC22100. 图像相似度

描述

给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。

输入描述

第一行包含两个整数m和n,表示图像的行数和列数,用单个空格隔开。1≤m≤100, 1≤n≤100。之后m行,每行n个整数0或1,表示第一幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。之后m行,每行n个整数0或1,表示第二幅黑白图像上各像素点的颜色,相邻两个数用单个空格隔开。

输出描述

一个实数,表示相似度(以百分比的形式给出),精确到小数点后两位。

示例1

输入:

3 3
1 0 1
0 0 1
1 1 0
1 1 0
0 0 1
0 0 1

输出:

44.44

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 488K, 提交时间: 2020-06-24 20:15:23

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n=0,a,b,c[10000],d;
    cin>>a>>b;
    for(int i=0;i<a*b;i++)
        cin>>c[i];
    for(int i=0;i<a*b;i++)
    {cin>>d;
    if(d==c[i])
    n++;}
    cout<<fixed<<setprecision(2)<<n*1.0/(a*b)*100<<endl;
}

C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 372K, 提交时间: 2019-11-07 20:15:46

#include<stdio.h>
int main()
{int i,d,j,m,n,a[100][100];
float h;
 d=0;
 scanf("%d %d",&m,&n);
for(i=0;i<(m*2);i++)
{for(j=0;j<n;j++)
{scanf("%d",&a[i][j]);}}
for(i=0;i<(m);i++)
{for(j=0;j<(n);j++)
{if(a[i][j]==a[i+m][j])
{d++;}}}
h=(100.0*d)/(m*n);
printf("%.2f",h);}

C++ 解法, 执行用时: 3ms, 内存消耗: 532K, 提交时间: 2021-12-08 20:05:48

#include<bits/stdc++.h>
using namespace std;
int main()
{
	double m,n,p[10009];
	cin>>m>>n;
	m=m*n;
	for(int i=0;i<m;i++)
	{
		cin>>p[i];
	}
	double t=0;
	for(int i=0;i<m;i++)
	{
		cin>>n;
		if(n==p[i]) t++;
	}
	printf("%.2lf",t*100/m);
}

Python3(3.5.2) 解法, 执行用时: 28ms, 内存消耗: 3440K, 提交时间: 2018-12-31 17:55:36

m, n = map(int, input().split())
a = [list(map(int, input().split())) for i in range(m)]
b = [list(map(int, input().split())) for i in range(m)]
print('%.2f' % (sum(a[i][j] == b[i][j] for j in range(n) for i in range(m)) * 100 / m / n))

上一题