zoukankan      html  css  js  c++  java
  • 2017浙江工业大学-校赛决赛 猜猜谁是我

    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     double ans;
    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
    ",Nod[1].x);
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    v$、v_$、gv$之间的关系
    10046确认多块读无法跨区
    查询表Or列的注释信息
    数据文件resize扩容
    11.2.0.4rac service_name参数修改
    数据库开启对sys用户的审计
    sql查询未走索引问题分析之查询数据量过大
    ORA-00600: internal error code, arguments: [kole_t2u], [34]
    ORA-00600: internal error code, arguments: [kcblasm_1], [103], [] bug
    Linux基础知识
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/7358825.html
Copyright © 2011-2022 走看看