浙江工业大学校赛 猜猜谁是我

猜猜谁是我

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 704    Accepted Submission(s): 250


Problem 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
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long int ll;

struct face{
    int num;
    double ans;
}f[1005];
bool cmp(face a,face b){
    return a.ans<b.ans;
}
int main(){
    int n;
    int x,y;
    while(~scanf("%d",&n)){
        for(int i=0;i<n;i++){
            double ans=0;
            scanf("%d %d",&x,&y);
            ans+=sqrt(1.0*(200-x)*(200-x)+1.0*(200-y)*(200-y));
            scanf("%d %d",&x,&y);
            ans+=sqrt(1.0*(200-x)*(200-x)+1.0*(600-y)*(600-y));
            scanf("%d %d",&x,&y);
            ans+=sqrt(1.0*(450-x)*(450-x)+1.0*(400-y)*(400-y));
            scanf("%d %d",&x,&y);
            ans+=sqrt(1.0*(700-x)*(700-x)+1.0*(400-y)*(400-y));
            f[i].ans=ans;
            f[i].num=i+1;
        }
        sort(f,f+n,cmp);
        printf("%d\n",f[0].num);
    }
    return 0;
}

 
Hint
欧氏距离就是两个点的直线距离
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
猜数字游戏是一种经典的小游戏,玩家需要猜测一个随机数,直到猜中为止。下面是浙江大学的猜数字游戏C语言代码及详解: ```c #include <stdio.h> int main() { int random, n, i, a; scanf("%d %d", &random, &n); // 输入随机数和猜测次数 for (i = 1; i <= n; i++) { scanf("%d", &a); // 输入猜测的数字 if (a < 0) { // 如果输入负数,游戏结束 printf("Game Over\n"); break; } if (a == random) { // 如果猜中了 if (i == 1) { // 如果第一次就猜中 printf("Bingo!"); break; } else if (i <= 3) { // 如果猜中了且猜测次数小于等于3 printf("Lucky You!"); break; } else if (i <= n) { // 如果猜中了且猜测次数大于3小于等于n printf("Good Guess!"); break; } } if (a > random) printf("Too big\n"); // 如果猜测的数字大于随机数 if (a < random) printf("Too small\n"); // 如果猜测的数字小于随机数 if (i == n) printf("Game Over\n"); // 如果猜测次数用完了,游戏结束 } return 0; } ``` 代码详解: 1.首先输入随机数和猜测次数; 2.使用for循环进行猜测,循环次数为猜测次数n; 3.在循环中,输入猜测的数字a; 4.如果输入负数,游戏结束,输出"Game Over"; 5.如果猜中了,根据猜测次数输出不同的提示信息,然后结束游戏; 6.如果猜测的数字大于随机数,输出"Too big"; 7.如果猜测的数字小于随机数,输出"Too small"; 8.如果猜测次数用完了,游戏结束,输出"Game Over"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值