2017浙江工業大學-校賽決賽 猜猜誰是我
阿新 • • 發佈:2017-08-14
簡單 矩陣 水平 個人 tro 個數 struct ostream ace
Description
女神YSJ給Martin發了一個視頻。“猜猜裏面哪個是我。” 女神說。
作為一個臉盲,再加上多年不見,Martin已經完全不知道女神長成了什麽樣子,他表示完全認不出來。
好在Martin手上還有一張YSJ小時候的照片,他可以拿照片和視頻裏的人進行特征比對,從而找出女神。
為了簡化問題,我們將YSJ小時候的臉表示成一個800行800列的矩陣,然後給出眼睛、鼻子、嘴巴的中心在臉上的坐標,全部用整數表示。視頻中的其他人也都按照這個方式表示,截取正臉並且縮放到800x800以減小誤差,輸入不保證符合實際(例如不保證眼睛在鼻子的上方,鼻子在嘴巴上方blahblah。。)
Martin進行特征比對的方式相當簡單粗暴:眼睛、鼻子、嘴巴中心和YSJ小時候照片的歐氏距離總和最小的就是女神。
YSJ小時候的臉部特征描述如下, 分別表示左眼、右眼、鼻子、嘴巴的中心在圖中的位置(參見輸入描述):
200 200
200 600
450 400
700 400
但是Martin的編程水平已經和他的表達能力一樣爛到一定境界了,所以他希望聰明的你能夠幫幫他。
Input
多組數據。每個人的人臉特征都用4行表示,每行兩個整數x,y(0<=x,y<800) 分別表示左眼、右眼、鼻子、嘴巴的中心在圖中的位置。。每一組數據先給出n (0< n<1000),表示視頻中出現的臉的個數,編號從1-n,接著的n*4行給出每張臉的描述。
Output
對於每組數據,輸出最可能是女神的臉的編號,如果有多張人臉符合要求,輸出編號最小的,單獨一行。
Sample Input
3
201 201
200 600
450 400
700 400
201 200
200 600
450 400
700 400
200 201
200 600
450 400
700 400
Sample Output
2
解法:emmmmm
1#include <iostream> 2 #include <stdio.h> 3 #include <vector> 4 #include <queue> 5 #include <math.h> 6 #include <algorithm> 7 #include <string.h> 8 #define N 100005 9 #define LL long long 10 using namespace std; 11 struct Node{ 12 int x,y; 13 doubleans; 14 }node[N],Nod[N]; 15 double Dis(Node x,double a,double b){ 16 return sqrt((x.x-a)*(x.x-a)+(x.y-b)*(x.y-b)); 17 } 18 bool Sort(Node a,Node b){ 19 if(a.ans==b.ans){ 20 return a.x<b.x; 21 } 22 return a.ans<b.ans; 23 } 24 int main(){ 25 int n; 26 while(cin>>n){ 27 for(int i=1;i<=n;i++){ 28 double sum=0.0; 29 double hx,hy; 30 double ex,ey; 31 double lx,ly; 32 double xx,yy; 33 scanf("%lf%lf",&hx,&hy); 34 sum+=sqrt((hx-200.0)*(hx-200.0)+(hy-200.0)*(hy-200.0)); 35 scanf("%lf%lf",&ex,&ey); 36 sum+=sqrt((ex-200.0)*(ex-200.0)+(ey-600.0)*(ey-600.0)); 37 scanf("%lf%lf",&lx,&ly); 38 sum+=sqrt((lx-450.0)*(lx-450.0)+(ly-400.0)*(ly-400.0)); 39 scanf("%lf%lf",&xx,&yy); 40 sum+=sqrt((xx-700.0)*(xx-700.0)+(yy-400.0)*(yy-400.0)); 41 Nod[i].ans=sum; 42 Nod[i].x=i; 43 } 44 sort(Nod+1,Nod+1+n,Sort); 45 printf("%d\n",Nod[1].x); 46 } 47 return 0; 48 }
2017浙江工業大學-校賽決賽 猜猜誰是我