【ACM】影象分類
阿新 • • 發佈:2018-11-24
題目連結: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)
【輸出描述】
輸出一個整數(答案向下取整),表示兩張圖片的歐幾里得距離。
【提示】
對一個小數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; }